如果匹配模式,我需要用 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 solution 到 Replace 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/