在从 cat 管道传输之后,如何告诉 grep 仅突出显示大于 720 或可能超过两位数字的数字?

在从 cat 管道传输之后,如何告诉 grep 仅突出显示大于 720 或可能超过两位数字的数字?

这是一个相当简单的问题。如果您想添加有关以这种方式使用 grep 的其他有用信息,请随意。

答案1

假设“突出显示大于 720 的数字”是指您想要查看完整文本,但这些数字在终端输出中以颜色突出显示。我进一步假设,如果这些数字是单词的一部分,或者以任何非数字(包括否定符号或小数点)作为前缀或后缀,也应突出显示这些数字。但是,前导零不属于匹配项的一部分。

也就是说,您可以在使用开关^|[1-9]\d{3,}|[89]\d{2}|7[2-9]\d启用 PCRE 兼容表达式后尝试正则表达式。这是一个示例输出,从文件读取,其中突出显示的部分以粗体显示:grep-Pexample.txt

$ grep -P '^|[1-9]\d{3,}|[89]\d{2}|7[2-9]\d' example.txt

something
foo 123 42 1111 777 719 720 1000000
321 -6666 bar999 8383m x1425y 52411.0 00013

使用的正则表达式由多个部分组成,这些部分用竖线 ( ) 连接在一起|,这意味着只要其中任何一个部分匹配,它就匹配:

  • ^只是在每行的开头进行匹配,实际上不消耗任何字符。添加此功能还显示输出中没有适当数字的所有其他行,但不突出显示这些行的任何部分。
  • [1-9]\d{3,}匹配 1-9 范围内的单个数字(无前导零),后跟至少三个或更多任意数字(\d相当于[0-9])。此规则匹配所有大于或等于 1000 的数字。
  • [89]\d{2}匹配以 8 或 9 开头,后面跟着正好两个任意数字的数字。这将匹配从 800 到 999 的所有数字。
  • 7[2-9]\d匹配以 7 开头的数字,后面跟着 2-9 范围内的一位数字和另一个任意数字。这涵盖了从 720 到 799 的所有数字。

答案2

我遇到了类似的问题 - 检查版本字符串需要为“Version 2.32”或更高版本。我的 grep(嵌入式 BusyBox)不支持 -P 选项或 {n},因此使用基本 grep:

grep "Version 2\.3[2-9]\|2\.[4-9][0-9]\|[3-9]\.[0-9][0-9]"

相关内容