在bash中,我正在尝试搜索(grep)命令(ntp)的输出,以获取特定字符串。但是,输出中的一列不断变化。所以对于那个专栏,它可以是任何角色。
我可能没有正确地做到这一点,但是*
并没有像我希望的那样工作。
ntpq -p | grep "10 l * 64 377 0.000 0.000 0.001"
星号正在替换从 - 更改为 - 到第1-64行的列。
任何帮助都会非常感激!
答案 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"