0.49
コマンドを使用して文字列(ドット付き)を検索しようとしています
grep -r "0.49" *
しかし、何が起こっているのかというと0449
、0949
などの文字列を含む望ましくない結果も得られているということです。Linuxは、dot(。)を任意の文字と見なし、すべての結果を引き出します。しかし、「0.49」の結果だけを取得したいと思います。
grep
正規表現を使用します。.
正規表現の「任意の文字」を意味します。リテラル文字列が必要な場合は、、を使用するgrep -F
か、toをfgrep
エスケープ.
し\.
ます。
文字列を二重引用符で囲むことを忘れないでください。または、使用する必要があります\\.
したがって、コマンドは次のようにする必要があります。
grep -r "0\.49" *
また
grep -r 0\\.49 *
また
grep -Fr 0.49 *
grep -F -r '0.49' *
0.49を正規表現ではなく「固定」文字列として扱います。これは.
その特別な意味を失います。
.
asをエスケープする必要があります"0\.49"
。
A.
は、任意の文字(改行を除く)に一致する正規表現メタ文字です。文字通りのピリオドに一致させるには、それをエスケープする必要があります。
ドットをエスケープすることを示唆する答えはたくさんありますが\.
、私はこの問題に何度も遭遇しています:\.
と同じ結果が得られます.
ただし、これら2つの式は私には有効です。
$ grep -r 0\\.49 *
と:
$ grep -r 0[.]49 *
UbuntuとArchlinuxで「通常の」bashシェルを使用しています。
編集、またはコメントによると:
$ grep -r '0\.49' *
ここで違いを生む一重引用符に注意してください。
「[。]」も使用できます
grep -r "0[.]49"
ただ逃げる.
grep -r "0\.49"
ドットをエスケープします。サンプルコマンドはになります。
grep '0\.00'
\を使用して、ドットやその他の特殊文字をエスケープできます
例えば。grep -r "0 \ .49"
基本的にすべての特殊文字を無視し、grepによって解釈されない--オプションを使用して検索することもできます。
$ cat foo |grep -- "0\.49"