如果匹配模式,我需要用 sed 替换整行。
例如,如果该行是“一二六三四”,并且存在“六”,则应将整行替换为“故障”。

最佳答案

您可以使用以下任一方法进行操作:

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

它基于 this solutionReplace whole line containing a string using Sed

更一般地,您可以使用表达式 sed '/match/s/.*/replacement/' file 。这将在包含 sed 's/match/replacement/' 的那些行中执行 match 表达式。在您的情况下,这将是:
sed '/six/s/.*/fault/' file



在这种情况下,我们可以将 -e 用于多个条件:
sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file

等等。

或者也:
sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file

关于shell - 用 sed 找到匹配时替换整行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16440377/

10-16 18:39