是否可以使用grep仅匹配预先指定范围内的数字行?
例如,我想列出包含单词'error'的日志范围[1024, 2048]
中包含数字的所有行。
我想保留'-n'功能,即在文件中包含匹配行的编号。
答案 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