使用shell脚本使用sedreplacestring的特定字符

我必须用一些其他的值replace一个特定的文件行。 例如:我有一个文件的内容如下:

request.timing=0/10 * * * * * ? 

现在,我想用dynamic值replace10(或者具体来说,在那个地方的任何值)。 例如,如果我想用20replace它,那么文件应该更新为:

 request.timing=0/20 * * * * * ? 

有人能帮我吗? 我使用sed如下:

 sed -i "s/request.timing=0\/??/request.timing=0\/$poller" 

poller是我们通过的dynamic值。

 $ echo 'request.timing=0/10 * * * * * ?' | sed -r 's:(request.timing=0/)[0-9]+:\1135:' request.timing=0/135 * * * * * ? $ poller="135" $ echo 'request.timing=0/10 * * * * * ?' | sed -r 's:(request.timing=0/)[0-9]+:\1'"$poller"':' request.timing=0/135 * * * * * ? 

首先,你必须检查变量$poller具有的字符,因为sed可以把那里的任何字符解释为一个特殊字符。 一旦你检查了,使用不在 $pollersed分隔符。 假设我们可以使用/

 sed -r 's/(request.timing=0\/)[0-9]{2}/\1'"$poller"'/g' 

它是如何工作的

-r选项激活扩展的正则表达式,所以你可以使用像[0-9]{2}( ... )东西,你捕获替换站点中使用的字符串。

你有麻烦的原因是? 在正则表达式中无效。 使用. 代替。 ? 用来表示前一个字符可能出现0或1次。

 sed -i "s/request.timing=0\/../request.timing=0\/$poller" 

(这不是说其他​​答案是不正确的!)