2016-01-21 65 views
0

我有文本作爲文件如下:如何使用sed的選擇性更換某些行

Line 1 
Line 2 
WORD1 
Line3 
Line 4 
WORD2 
Line5 

我想更換WORD1和WORD2之間的所有行產生最終的輸出:

Line 1 
Line 2 
NEW 
LINES 
XXXXX 
Line5 

With sed '/WORD1/,/WORD2/d' input.txt我可以刪除這些行,但是如何替換它們而不是刪除它們?

+0

嘗試'sed'/WORD1/,/WORD2/{s/.*/foo/}'文件' –

+0

@AvinashRaj將爲每一行之間打印相同的內容。試試'sed'/ WORD1/{:1; N;/WORD2 /!b1; s /.*/ foo /}'' – 123

回答

0

如果AWK是確定的,那麼試試這個:

awk '/WORD1/{p=1; print "NEW\nLINES\nXXXXX"}; !p; /WORD2/{p=0}' file 
1

方式一:

替換文本文件:

$ cat rep 
NEW 
LINES 
XXXXX 

輸入文件:

$ cat file 
Line 1 
Line 2 
WORD1 
Line3 
Line 4 
WORD2 
Line5 

sed命令:

$ sed '/WORD1/,/WORD2/{ 
> /WORD2/r rep 
> d 
> }' file 

sed命令爲行範圍WORD1分隔直到WORD2並刪除這些行(d),並且當遇到WORD2時,它轉儲替換文件內容(r rep)。

1

這可能爲你工作(GNU SED):

sed '/WORD1/,/WORD2/c\NEW\nLINES\nXXXXX' file 

它使用的範圍內匹配和c(其他城市)命令。