仅包含 5 或 6 个数字的行的 Grep

cok*_*ude 5 grep

你将如何 grep 只包含 5 或 6 个数字的行?像这样的东西。

case 1(有前导空格)

           10      2       12      1       13
Run Code Online (Sandbox Code Playgroud)

情况 2(无前导空格)

   1       2       3       4       5        6
Run Code Online (Sandbox Code Playgroud)

我认为这样的事情会奏效。

grep -E '[0-9]{5}'
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 8

grep -E '[0-9]{5}'正在寻找至少有 5 位数字的数字。您需要的是 5 个至少有一位的数字:

grep -E '[0-9]+([^0-9]+[0-9]+){4}'
Run Code Online (Sandbox Code Playgroud)
  • [0-9]+ - 至少一位数
  • [^0-9]+[0-9]+- 一个至少有一位数字,前面至少有一个非数字字符的数字。然后我们重复 4 次,得到 5 个由非数字分隔的数字。
  • 如果要求正好是 5,您可能希望用 包围这个正则表达式,[^0-9]以便整行匹配(当然还有锚点)。
  • 根据您在此处想要的内容(是否1,2,3,4,6符合条件?),您可能会查看其他分隔符。例如,适当的科学记数法实数会是什么样子:[+-]?(([0-9]+(\.[0-9]+)?)|([0-9]?\.[0-9]+))([eE][+-][0-9]+)?所以分离器可能不包括.e等他们可能只是空白,如mikeserv笔记。或者他们可能是逗号,如果它是一个 CSV 记录。或者根据区域设置,逗号将是小数点分隔符。改变[^0-9]按您的需要。


Jos*_* R. 3

我会选择比 更强大的东西grep。这可以在 perl 中完成:

perl -ne 'print if s/\d+/$&/g == 5' your_file
Run Code Online (Sandbox Code Playgroud)

正则表达式替换将所有由一个或多个数字 ( \d+) 组成的组替换为其自身 ( $&):它不执行任何操作。它仅用于副作用,因为s///运算符返回它设法替换其正则表达式的次数。s///因此,仅当找到 5 组数字时才打印该行。