grep仅匹配指定范围内的行

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

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


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

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


首先使用sed:

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

-n表示不要打印行,'x,y,p'表示打印行xy(覆盖-n)


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
链接地址: http://www.djcxy.com/p/19655.html

上一篇: grep match only lines in a specified range

下一篇: How to truncate long matching lines returned by grep or ack