1

bash 内で、コマンド (ntp) の出力から特定の文字列を検索 (grep) しようとしています。ただし、出力の列の 1 つが常に変化しています。したがって、その列では、任意の文字にすることができます。

私はおそらくこれを正しく行っていませんが、*期待どおりに機能していません。

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

アスタリスクは、- から 1 から 64 まで変化する列を秒単位で置き換えています。

どんな助けでも大歓迎です!

4

1 に答える 1

5

正規表現での は、シェルでのグロビングと*は異なります。*以下は、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"

ただし、「任意の文字の 1 つ以上」に一致させたい場合があります。

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 に答える