我必须用一些其他的值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
可以把那里的任何字符解释为一个特殊字符。 一旦你检查了,使用不在 $poller
的sed
分隔符。 假设我们可以使用/
:
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"
(这不是说其他答案是不正确的!)