需要更有效的 grep 来排除字符串中的数值

需要更有效的 grep 来排除字符串中的数值

我正在 grep 日志文件,寻找显示“queued 10”或更高输出的结果。

前任。 grep 'queued' *20231016* | grep -vE 'queued 1|queued 2|queued 3'

这工作得很好,但是,如果我想查看排队后数值大于 10、20 等的任何内容,是否有更有效的方法来 grep 它?显然,通过管道传输那么多排除项(超出上面显示的范围)是不可行的。

答案1

当你可以构建正则表达式来匹配数字范围,我建议切换到可以直接执行数字比较的工具。例如

perl -ne 'print if /queued (\d+)/ && $1 > 10'

或者

gawk 'match($0,/queued ([[:digit:]]+)/,a) && a[1] > 10'

答案2

您实际上正在寻找“queued”后面跟着 2 位或更多数字。这很简单:

grep -E 'queued [1-9][0-9]+' *20231016*

永远记住,正则表达式处理的是文本模式而不是数据

相关内容