9

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

我想保留“-n”功能,即在文件中有匹配行的编号。

4

3 回答 3

8

首先使用 sed:

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

-n 表示不打印行,'x,y,p' 表示打印行 xy 包括在内(覆盖 -n)

于 2012-06-19T07:25:27.930 回答
7
sed -n '1024,2048{/error/{=;p}}' | paste - -

/error/是一个匹配并=打印行号的模式。

于 2012-06-19T07:30:28.673 回答
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
于 2013-12-30T13:52:15.450 回答