233

0.49コマンドを使用して文字列(ドット付き)を検索しようとしています

grep -r "0.49" *

しかし、何が起こっているのかというと04490949などの文字列を含む望ましくない結果も得られているということです。Linuxは、dot(。)を任意の文字と見なし、すべての結果を引き出します。しかし、「0.49」の結果だけを取得したいと思います。

4

9 に答える 9

285

grep正規表現を使用します。.正規表現の「任意の文字」を意味します。リテラル文字列が必要な場合は、、を使用するgrep -Fか、toをfgrepエスケープ.\.ます。

文字列を二重引用符で囲むことを忘れないでください。または、使用する必要があります\\.

したがって、コマンドは次のようにする必要があります。

grep -r "0\.49" *

また

grep -r 0\\.49 *

また

grep -Fr 0.49 *
于 2012-04-27T07:52:00.577 に答える
37

grep -F -r '0.49' *0.49を正規表現ではなく「固定」文字列として扱います。これは.その特別な意味を失います。

于 2012-04-27T07:52:16.653 に答える
22

.asをエスケープする必要があります"0\.49"

A.は、任意の文字(改行を除く)に一致する正規表現メタ文字です。文字通りのピリオドに一致させるには、それをエスケープする必要があります。

于 2012-04-27T07:52:22.473 に答える
8

ドットをエスケープすることを示唆する答えはたくさんありますが\.、私はこの問題に何度も遭遇しています:\.と同じ結果が得られます.

ただし、これら2つの式は私には有効です。

$ grep -r 0\\.49 *

と:

$ grep -r 0[.]49 *

UbuntuとArchlinuxで「通常の」bashシェルを使用しています。

編集、またはコメントによると:

$ grep -r '0\.49' *

ここで違いを生む一重引用符に注意してください。

于 2018-01-18T15:50:23.617 に答える
7

「[。]」も使用できます

grep -r "0[.]49"
于 2017-03-21T14:04:02.673 に答える
6

ただ逃げる.

grep -r "0\.49"

于 2012-04-27T07:53:27.590 に答える
5

ドットをエスケープします。サンプルコマンドはになります。

grep '0\.00'
于 2012-04-27T07:52:45.267 に答える
4

\を使用して、ドットやその他の特殊文字をエスケープできます

例えば。grep -r "0 \ .49"

于 2012-04-27T07:52:18.837 に答える
1

基本的にすべての特殊文字を無視し、grepによって解釈されない--オプションを使用して検索することもできます。

$ cat foo |grep -- "0\.49"
于 2019-11-18T07:17:48.407 に答える