【问题标题】:Bash scripting. grep with wildcard not workingBash 脚本。带有通配符的 grep 不起作用
【发布时间】:2012-08-13 08:07:17
【问题描述】:

在 bash 中,我尝试在命令 (ntp) 的输出中搜索 (grep) 以查找特定字符串。但是,输出中的一列是不断变化的。因此,对于该列,它可以是任何字符。

我可能没有正确执行此操作,但 * 没有像我希望的那样工作。

ntpq -p | grep "10 l * 64  377  0.000  0.000  0.001"

星号正在用第二个替换从 - 变为 1-64 的列。

任何帮助将不胜感激!

【问题讨论】:

标签: bash grep special-characters wildcard


【解决方案1】:

正则表达式中的* 与shell globbing 中的* 不同。以下内容来自 regex(7) 手册页:

An atom followed by '*' matches a sequence of 0 or more matches of  the  atom.

这意味着在您的正则表达式中,您说的是“匹配 0 个或更多空间”。如果要匹配0个或多个任意字符,则需要.*

ntpq -p | grep "10 L .* 64 377 0.000 0.000 0.001"

虽然,您可能希望匹配“一个或多个任意字符”:

ntpq -p | grep -E "10 L .+ 64 377 0.000 0.000 0.001"

更好的是,只匹配数字或-

ntpq -p | grep -E "10 L [[:digit:].\-]+ 64 377 0.000 0.000 0.001"

【讨论】:

  • 你的救命稻草.. ,* 完美运行。我试过 [[:digit:].-]+ 并且由于某种原因无法让它工作,但不用担心。
  • @36DDJuicer - 我更新了答案。这是因为 - 在字符类中是特殊的,必须转义。如果您发现答案有帮助,您应该“接受”它。
  • 他们为什么要打破最常见的约定?除了让普通用户更复杂、更不熟悉之外,我认为没有任何理由。
猜你喜欢
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2023-02-05
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多