解决方法:

解决方法:

根据 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

\<(以及)的这个问题\b不仅适用于/,而且适用于所有非单词字符。 (即除了[[:alnum:]]和以外的字符_。)

问题是正则表达式引擎总是会绕过非单词字符,就像/搜索下一个锚点时一样\<。这就是为什么您不应该/在 后面放置非单词字符\<。如果你这样做,通过构造,没有任何东西会匹配。

grep 选项的替代方案-w如下:

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

相关内容