解決策:

解決策:

GNU文書によると:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.

私の/etc/fstabは次のようになります:

/dev/sdb1       /media/fresh      ext2   defaults     0 0

私はgrepが/media/freshの存在に対してTRUE / FALSEを返したいと思います。\<を試してみましたが、\>成功しませんでした。なぜ?

egrep '\</media/fresh\>' /etc/fstab

解決策:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab

しかし、もっと醜いです。

私のgrepは2.5.1です。

答え1

\<\>単語の先頭と末尾でそれぞれ空の文字列と一致し、単語構成文字は次のとおりです。

[[:alnum:]_]

からman grep

Word-constituent characters are letters, digits, and the underscore.

したがって、/正しい単語形成文字ではないため、正規表現は失敗します。

代わりに、単語の周囲にスペースがあるときに単語を一致させる-wオプションを使用できます。grep

grep -wo '/media/fresh' /etc/fstab

例:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh

答え2

\<(and)に関するこの質問は、\b唯一のものではなく、/単語以外のすべての文字にも当てはまります。 (つまり、[[:alnum:]]および以外の文字です_。)

問題は、正規表現エンジンが/次のアンカーを検索するときなど、常に単語ではなく文字をバイパスすることです\<。そのため、/その後に単語ではなく文字を入れてはいけません\<。これにより、構成上何も一致しません。

grepオプションの代替-wは次のとおりです。

egrep "(^|\W)/media/fresh($|\W)"

関連情報