【问题标题】:Grepping for whole words containing only numbers搜索仅包含数字的整个单词
【发布时间】:2015-07-06 15:24:45
【问题描述】:

我正在尝试 grep 包含仅由数字组成的单词的行。

所以给定一个这样的示例文件:

abcd
abcd 123
adef1234

我希望输出abcd 123 行并将其分配给一个变量。我尝试了以下方法:

grep -w '^[0-9]$' test_file.txt

但它不起作用。谁能帮帮我?

【问题讨论】:

  • 当您说“它不起作用”时,它到底是如何不起作用的?你得到不正确的结果吗?什么是不正确的?您得到了什么结果,它们与您的预期有何不同?
  • @fedorqui 想要打印包含字符仅为数字的单词的行。
  • @Andy Lester 错误是我没有得到任何输出。
  • 好的,我明白了。我用一些措辞编辑了这个问题。删除我之前的评论
  • 字母、空格和数字是唯一可以出现在输入文件中的字符吗?如果现在,请提供示例输入,以显示纯数字字符串可以出现的更多样化的方式(例如,如果输入中存在abcd 123.,这是否与您所需的正则表达式匹配?)。

标签: regex unix grep pattern-matching


【解决方案1】:

在 grep 中 ^$ 匹配 的开始和结束,即使启用了 -w 标志。并且您需要启用扩展正则表达式(-E 标志)才能使用+。试试

grep -E -w '[0-9]+' test_file.txt

【讨论】:

  • 不错。另一种选择:grep '\<[[:digit:]]\+\>'
  • ^$ 匹配 string 的开始和结束,而不是 line。这意味着它们只匹配行的开始和结束,如果您正在测试的字符串不包含换行符。 AFAIK 没有选项 [尚未] 让 grep 支持多行正则表达式匹配,但有 sed、awk 等,因此人们必须了解所有正则表达式引擎中这两个元字符的真实定义。
  • @EdMorton,谢谢。这对我来说是一个糟糕的措辞。来自man grep“匹配行首尾的空字符串”.
  • 是的,从技术上讲,grep 确实如此,因为它一次处理一行,但这并不是那些元字符的意思。我不会提出来,但是对这些字符含义的误解会导致人们对使用其他工具的人感到困惑。也许只是在第一行的某处添加一个“in grep”?或者不管你喜欢什么...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多