如何使用sed选择性替换某些行

时间:2016-01-21 09:26:57

标签: linux bash text sed

我在文件中有如下文字:

Line 1
Line 2
WORD1
Line3
Line 4
WORD2
Line5

我想替换WORD1和WORD2之间的所有行以产生最终输出:

Line 1
Line 2
NEW
LINES
XXXXX
Line5

使用sed '/WORD1/,/WORD2/d' input.txt我可以删除这些行,但是如何替换它们而不是删除它们?

3 个答案:

答案 0 :(得分: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 :(得分:1)

这可能适合你(GNU sed):

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

这使用范围匹配和c(更改)命令。

答案 2 :(得分:0)

如果awk没问题,那就试试这个:

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