ここに次のコマンドがあります。
grep -B10 -A10 '14:14:50 {"channels":["/alerts/6979/new"],"data":"New alerts for unit 6979"}' mygateway.log
14:14:50を検索する代わりに、50をランダムな数字に置き換えたいと思います。だから私は「.」を使って正規表現のすべての文字を表現したいと思います。ただし、プログラミング言語では通常、正規表現を \abc.xyz\ として参照します。ここで「。」任意の文字と任意の数の文字にすることができます。しかし、上記のgrep文字列で "."を使用すると、戻り値は提供されません。
答え1
ここでの問題は、この単語が.
何らかの意味で使用されることです。一つ特徴。したがって、inは一致します.
が、一致するものがないため、残りの行は一致しません。何があっても、あなたが探しているものが何であるかを知っているので5
50
0
数字、正規表現をより具体的に記述する必要があります。数字を次のように見てみましょう。
[0-9]\+
数値にオプションの小数部(小数点の後ろ)がある可能性があることがわかっている場合は、次のように使用できます。
[0-9]\+\(\.[0-9]\+\)?
's(PCRE)オプションを使用する場合は、+
角括弧の前のバックスラッシュを省略する必要があります。grep
-P
このオプションを使用する予定の場合は、-P
POSIXと互換性がなく、すべてのプラットフォームで機能しない可能性があることに注意してください。
答え2
-P
このフラグを使用してPerl準拠の正規表現を有効にし、以下を使用することもできます\d
。
grep -P -B10 -A10 '14:14:\d+ {"channels":["/alerts/6979/new"],"data":"New alerts for unit 6979"}' mygateway.log
制限を減らして実際に単純化することもできます(詳細はもちろん、入力データによって異なりますが、これは機能するはずです)。
grep -P -B10 -A10 '14:14:\d+.*channels.*alerts/6979/new.*data.*New' mygateway.log
/alerts/6979/new/
行が両方とも一致した場合、New
残りは変更されていないと見なされます。