Grep 单词边界

Fel*_*rez 32 grep regular-expression

根据 GNU 文档:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.
Run Code Online (Sandbox Code Playgroud)

我的 /etc/fstab 看起来像这样:

/dev/sdb1       /media/fresh      ext2   defaults     0 0
Run Code Online (Sandbox Code Playgroud)

我希望 grep 为 /media/fresh 的存在返回 TRUE/FALSE。我尝试使用\<\>但没有用。为什么?

egrep '\</media/fresh\>' /etc/fstab
Run Code Online (Sandbox Code Playgroud)

解决方法:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab
Run Code Online (Sandbox Code Playgroud)

但它看起来更丑。

我的 grep 是 2.5.1

hee*_*ayl 35

\<并分别\>匹配单词开头和结尾的空字符串,并且只有单词组成字符是:

[[:alnum:]_]
Run Code Online (Sandbox Code Playgroud)

来自man grep

Word-constituent characters are letters, digits, and the underscore.
Run Code Online (Sandbox Code Playgroud)

因此,您的 Regex 失败,因为/它不是有效的单词组成字符。

相反,由于周围有空格,您可以使用-w选项grep来匹配单词:

grep -wo '/media/fresh' /etc/fstab
Run Code Online (Sandbox Code Playgroud)

例子:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh
Run Code Online (Sandbox Code Playgroud)