Bash脚本。 grep与通配符不工作

时间:2012-08-16 22:17:50

标签: bash grep special-characters wildcard

在bash中,我正在尝试搜索(grep)命令(ntp)的输出,以获取特定字符串。但是,输出中的一列不断变化。所以对于那个专栏,它可以是任何角色。

我可能没有正确地做到这一点,但是*并没有像我希望的那样工作。

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

星号正在替换从 - 更改为 - 到第1-64行的列。

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:6)

正则表达式中的*与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"