2013-08-20 82 views
2

我看到關於sed命令的問題很多,但沒有一個符合我的傢伙。sed:替換含有圖案的線

我想替換包含模式的整個行。

我認爲sed命令是最好的選擇。我開始與這個sed命令,但不起作用

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

在那之後我與這個命令的其它測試,但只有替代模式,而不是整個行。

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

回答

10

您需要匹配包含該模式的整行然後替換。使用這樣的:

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

我還添加了\b word邊界,所以你只匹配pattern但要避免匹配patterns

說明:^.*\bpattern\b.*$我們用來確保整行匹配包含模式。 ^是行開始,$行結束。 .*匹配0或更多長度的文本。因此^.*匹配pattern.*$之前的所有文本匹配pattern之後的所有文本。

使用awk的,你可以這樣做:

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

謝謝,可以完美運行。但是能否在模式之前解釋'^。*'的含義以及之後的'。* $'是什麼意思?提前致謝。 –

+0

我不明白你對\ b的解釋,因爲沒有\ b很好。 –

+1

'\ b'用於單詞邊界。使用'\ b'匹配字符串將是:'^。* pattern。* $',它也可以匹配一行,例如:'123 mypatterns foo',但是當我使用'^。* \ bpattern \ b。* $'它時將不符合該線。 – anubhava