Grep在特定文本之前显示几行

时间:2017-10-13 20:16:43

标签: linux grep

假设我在文本文件中有以下内容

...
abc
123
qwerty
line0
...
line3
line10
max
....

如何grep abc并捕获匹配后的所有行并停在包含特定文字的行,在此示例中为max

3 个答案:

答案 0 :(得分:2)

您可以使用sed

sed '/abc/,/max/!d'
  • !是否定的
  • d表示删除
  • /addr1/,/addr2/是"地址范围"
  • 整个表达方式意味着"删除该行,除非它在一行匹配/ abc /和一行匹配/ max /"之间。

同样在Perl中:

perl -ne 'print if /abc/ .. /max/'

答案 1 :(得分:2)

sed和我心爱的Perl更简单awk

awk '/abc/,/max/' filename

答案 2 :(得分:0)

sed / awk中的行范围寻址很简单,但如果您确实需要使用grep,则可以使用:

grep -Poz 'abc[^\0]*max' file

-z标志使grep将输入视为空字节终止行,因此假设您的输入不包含任何\0字节,则上述PCRE将选择所有内容在abcmax之间。