我正在 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*
永远记住,正则表达式处理的是文本模式而不是数据值。