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