是否可以使用 grep 仅匹配具有预先指定范围内的数字的行?例如,我想列出[1024, 2048]
日志范围内包含“错误”一词的所有数字行。
我想保留“-n”功能,即在文件中有匹配行的编号。
首先使用 sed:
sed -ne '1024,2048p' | grep ...
-n 表示不打印行,'x,y,p' 表示打印行 xy 包括在内(覆盖 -n)
sed -n '1024,2048{/error/{=;p}}' | paste - -
这/error/
是一个匹配并=
打印行号的模式。
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