【问题标题】:Grep for line having only 2 or 3 digitsGrep 表示只有 2 位或 3 位数字的行
【发布时间】:2021-11-15 14:22:05
【问题描述】:

我正在尝试打印包含 2 个或 3 个数字的行以及该行的其余部分。我带着代码来了:

grep -P '[[:digit:]]{2,3}' address

但这甚至会打印出 4 位数字的行。我不知道为什么会这样。

输出: 这段代码都不起作用;

grep -E '[0-9]{2,3}' address

这是包含地址文本的文件:

12 主街

123 大街

1234 大街

我已经指定使用 {2,3} 打印 2 或 3 个值,但过滤器仍然不起作用,并且正在打印超过 3 位的行。任何人都可以帮助我吗?非常感谢。

【问题讨论】:

  • 试试这个:^[[:digit:]]{2,3}\b(如果行以数字开头,这有效)
  • 确实如此。 '\b' 在这里是什么意思?
  • 如果数字后面总是空格的另一种解决方案:^[[:digit:]]{2,3}
  • 作为解释,根据定义,包含 4 位序列的行必然包含 3 位序列,因此grep 也会找到它们。您需要搜索“不是数字后跟2或3位数字后跟不是数字”
  • 不要将文本转换为像素。

标签: grep


【解决方案1】:

您可以使用反向 grep (-v) 过滤所有 4 位(及以上)的行:

grep -vE '[0-9]{4}' address

编辑:

我注意到你只需要 2 或 3 位数字,所以第一个命令也会让你得到 1 位数字。

这里是修复,再次使用相同的方法:

grep -E '[0-9]{2,3}' txt.txt | grep -vE '[0-9]{4}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多