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
/ media/freshが存在する場合、grepがTRUE/FALSEを返すようにします。 \<
および\>
を使用しようとしましたが、機能しませんでした。どうして?
egrep '\</media/fresh\>' /etc/fstab
egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
しかし、それは醜く見えます。
私のgrepは2.5.1です
\<
および\>
は、Wordの先頭と末尾の空の文字列にそれぞれ一致し、Word構成文字のみが次のとおりです。
[[:alnum:]_]
man grep
から:
Word-constituent characters are letters, digits, and the underscore.
したがって、/
は有効なWord構成文字ではないため、正規表現は失敗します。
代わりにスペースがあるので、grep
の-w
オプションを使用してWordと一致させることができます。
grep -wo '/media/fresh' /etc/fstab
例:
$ grep -wo '/media/fresh' <<< '/dev/sdb1 /media/fresh ext2 defaults 0 0'
/media/fresh
\<
(および\b
)に関するこの問題は、/
だけでなく、Word以外のすべての文字にも当てはまります。 (つまり、[[:alnum:]]
および_
。以外の文字)
問題は、次のアンカー/
を検索するときに、正規表現エンジンが常に\<
のようなWord以外の文字をバイパスすることです。そのため、/
の直後に\<
のようなWord以外の文字を配置しないでください。そうすると、構造上、何も一致しません。
Grepの-w
オプションの代替は、次のようになります。
egrep "(^|\W)/media/fresh($|\W)"