ファイルに対してgrep正規表現を実行しようとしていますが、「00」と「0」が表示されている行を除外する必要があります。私はこの表現を思いついた:
grep -a -E \"stored\"\:\ \"\*123\*(?!00)[0-9]{2,5}\#\" $filename
しかし、bashで実行しようとすると、
-bash !00: event not found
、または(私が入力した後はset +H
)、
-bash: syntax error near unexpected token
( '`
この正規表現をbashで適切にエスケープするには、何をする必要がありますか?
シェルで特別な意味を持つ!
をエスケープしなかったため、エラーメッセージが表示されます。 grep
のパターンパラメータの一部として使用するには、引用符で囲むか、エスケープする必要があります。
すべての特殊文字を1つずつ引用する代わりに、パターン全体を(目的に応じて)一重引用符または二重引用符で囲む方がはるかに簡単です。次に例を示します。
grep -a -P '"stored": "*123*(?!00)[0-9]{2,5}#"'
また、負の先読み-E
はgrep
拡張正規表現の一般的な実装では機能しないため、-P
を(?!...)
に置き換えたことにも注意してください。 -P
フラグは、これをサポートするPerl正規表現を有効にします。