sed:替换包含模式的行

时间:2013-08-20 18:41:06

标签: shell replace sed

我看到很多关于sed命令的问题,但没有一个与我的家伙相符。

我想替换包含模式的整行。

我认为sed命令是最好的选择。我从这个sed命令开始但是不起作用

sed -i 's/pattern/Substitution/' myfile.txt

之后我用其他命令测试,但只替换模式,而不是整行。

echo "hello y luego bye" | sed "s|hello|adeu|g"

1 个答案:

答案 0 :(得分:10)

您需要匹配包含该模式的整行,然后替换。像这样使用它:

sed 's/^.*\bpattern\b.*$/Substitution/' file

我还为单词边界添加了\b,以便您只匹配pattern,但避免匹配patterns

说明: ^.*\bpattern\b.*$我们过去常常确保整行匹配包含模式。 ^是行首,$是行结束。 .*匹配0个或更多长度的文本。因此^.*匹配pattern之前的所有文字,.*$匹配pattern之后的所有文字。

使用awk你可以这样做:

awk '!/affraid/{print} /affraid/{print "Substitution"}' file