【问题标题】:using grep (awk?) how to find only the lines that have three single digits in it, between can be words or numbers使用 grep (awk?) 如何仅查找其中包含三个单个数字的行,其间可以是单词或数字
【发布时间】:2014-07-03 01:04:30
【问题描述】:

使用 grep (awk?) 如何仅查找具有三个个位数的行 其中,数字之间可以是数字或单词。

 A) word 67,5 9 word 7,9 word word 7 word 91
 B) word 7 word 8 word 77,5 word word 5 word 55,6 word 1
 C) word word word 4 word 66,8 word 5 word word 1

所以它只找到 C) 行,因为这里有三个数字:4 5 1

grep -n '[[:blank:]][0-9][[:blank:]] 找到所有三行,也不是 C 行中的数字 1

【问题讨论】:

  • 如果该行包含 4 个个位数怎么办 - 因为它包含 3 个个位数,所以也应该打印?就允许的组成字符而言 - 您对“单词”的定义是什么?

标签: regex awk


【解决方案1】:

这可能是您正在寻找的:

$ awk 'gsub(/(^| )[0-9]( |$)/,"&") == 3' file
 C) word word word 4 word 66,8 word 5 word word 1

或更稳健:

$ awk 'gsub(/(^|[[:blank:]])[[:digit:]]([[:blank:]]|$)/,"&") == 3' file
 C) word word word 4 word 66,8 word 5 word word 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多