如何使用sed获取两行之间的内容,但两条匹配的行被转义

时间:2015-08-23 14:16:31

标签: bash sed

我目前正在使用sed来获取两行之间的内容。我有一个很好的教程:http://www.cyberciti.biz/faq/unix-linux-sed-print-only-matching-lines-command/

在本教程中,我发现:

sed -n -e '/regexpA/,/regexpB/p' input.file

上面的命令也会打印出匹配regexpAregexpB的行,但是我想要逃避这两行,说这两条匹配的行不会打印到STDOUT,是否有任何漂亮的解决方案为了这?

提前致谢。

3 个答案:

答案 0 :(得分:5)

这个怎么样:

sed '1,/regexpA/d;/regexpB/,$d' input.file

答案 1 :(得分:1)

sed用于单独行的简单替换,只需使用awk:

$ cat file
a
b
c
d
e

$ awk '/b/{f=1} f; /d/{f=0}' file
b
c
d

$ awk 'f; /b/{f=1} /d/{f=0}' file
c
d

$ awk '/b/{f=1} /d/{f=0} f' file
b
c

$ awk '/d/{f=0} f; /b/{f=1}' file
c

有关其他常见的awk范围搜索习语,请参阅https://stackoverflow.com/a/17914105/1745001

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '/regexpA/,/regexpB/!d;//d' file

删除regexpAregexpB之前和之后的所有行,然后删除与regexpAregexpB匹配的行。