grep仅匹配指定范围内的行

时间:2012-06-19 07:21:46

标签: linux grep

是否可以使用grep仅匹配预先指定范围内的数字行? 例如,我想列出包含单词'error'的日志范围[1024, 2048]中包含数字的所有行。

我想保留'-n'功能,即在文件中包含匹配行的编号。

3 个答案:

答案 0 :(得分:7)

首先使用sed:

  

sed -ne< 1024,2048p' | grep ...

-n表示不打印线条,' x,y,p'表示打印行x-y包含(覆盖-n)

答案 1 :(得分:6)

sed -n '1024,2048{/error/{=;p}}' | paste - -

此处/error/是要匹配的模式,=打印行号。

答案 2 :(得分:3)

Awk是一个很好的工具:

$ awk 'NR>=1024 && NR<=2048 && /error/ {print NR,$0}' file

awk中,变量NR包含当前行号,$0包含行本身。

使用awk的好处是您可以轻松地将输出更改为您想要的显示。例如,使用冒号后跟TAB将行号与行分开:

$ awk 'NR>=1024 && NR<=2048 && /error/ {print NR,$0}' OFS=':\t' file