我需要更换整个生产线与sed
,如果它的模式相匹配。 例如,如果该行是“一个二六三四”,如果“六”是存在的,那么整条生产线应该与“错”所取代。
Answer 1:
您可以使用其中任一做:
sed 's/.*six.*/fault/' file # check all lines
sed '/six/s/.*/fault/' file # matched lines -> then remove
它获得包含全系列的six
与替换它fault
。
例:
$ cat file
six
asdf
one two six
one isix
boo
$ sed 's/.*six.*/fault/' file
fault
asdf
fault
fault
boo
正是基于这一解决方案来替换使用含有桑达串整条生产线
更一般地,你可以使用表达式sed '/match/s/.*/replacement/' file
。 这将执行sed 's/match/replacement/'
中含有这些系中的表达match
。 你的情况,这将是:
sed '/six/s/.*/fault/' file
如果我们有“一二六八11三四”,我们希望包括“八”和“十一”作为我们的“坏”的字样?
在这种情况下,我们可以使用-e
多个条件:
sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file
等等。
或者也可以:
sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file
Answer 2:
以上答案为我工作很好,只是提及的另一种方法
匹配单一模式,用新的替换:
sed -i '/six/c fault' file
匹配多个图案,并用一个新的(级联命令)代替:
sed -i -e '/one/c fault' -e '/six/c fault' file
Answer 3:
这可能会为你工作(GNU SED):
sed -e '/six/{c\fault' -e ';d}' file
要么:
sed '/six/{c\fault'$'\n'';d}' file
文章来源: Replace whole line when match found with sed