1

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

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

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

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

任何帮助将非常感激!

4

1 回答 1

5

*正则表达式中的A*与 shell 通配中的 a 不同。以下来自 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"
于 2012-08-16T22:31:52.450 回答