更换整条生产线,当比赛与SED发现(Replace whole line when match fo

2019-09-02 06:07发布

我需要更换整个生产线与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