2016-06-25 3 views
0

ここで何かを失っています。私は内容のファイルがある場合:grepで< and >をエスケープする

foo 
<foo> 

そして私をgrep "\<foo\>" file_nameは、それが唯一の二行目と一致してはならないのですか?私も最初に一致しています。

私はgrepにはあまりよくないので、おそらく私は物事を混乱させるでしょう。上記第二のgrepは、文字列<foo>を探していません

$ grep 'foo' file 
foo 
<foo> 
foobar 

$ grep '\<foo\>' file 
foo 
<foo> 

、それが付いていない文字列fooを探している:それらをエスケープ

+0

私はあなたがそれらをエスケープする必要はないと思う。これを試してみてください: grep "" – gawi

+0

明らかに私はこれを考えていました。 OK。ではなぜそれらをエスケープするとgrepはテキストでそれらを無視しますか? – user3804799

答えて

1

は彼らのメタ文字のプロパティを活性化し、GNUのgrepの中で単語の境界にそれらを回しますまたは単語構成文字によって直ちに成功した。

一般に、それが意味することを正確に知らなくても、エスケープするのは安全ではありません。ここで別の例です:

$ printf 'aa\na{2}b\n' 
aa 
a{2}b 
$ printf 'aa\na{2}b\n' | grep 'a{2}' 
a{2}b 
$ printf 'aa\na{2}b\n' | grep 'a\{2\}' 
aa 

上記\{..\}は、正規表現区間の区切り文字としてのメタ文字properitesを活性化しています。

関連する問題