grep 命令,查找以字母开头和结尾的单词

grep 命令,查找以字母开头和结尾的单词

所以我明白,如果您想将单词的开头与特定字母匹配,您可以使用\<, ex, \<Aa。反之亦然,对于单词结尾,\>。您如何将这两个命令组合在一起?

例如,如果您这样做,\<Aag\>它将仅匹配该单词。有没有办法将这两个命令分开?

答案1

\<\>运算符是一些非标准正则表达式运算符,在某些grep带或不带 的实现中作为扩展找到-E

在大多数实现中,它们分别在非单词字符(或主题的开头)和单词字符之间的边界以及单词字符和非单词字符(或主题的结尾)之间的边界进行匹配,单词字符是字母数字字符或下划线。

一些grep/regexp 实现具有[[:<:]][[:>:]]来代替,而一些实现则具有\b(来自 perl)匹配任一类型的边界。

那些支持其中任何一个的人通常也支持-w与单词匹配的选项。

\<Aag\>内部匹配foo-Aag为和\<之间的匹配,以及主题之间和 之间的匹配(主题是 的行)。-A\>ggrep

一些grep实现还支持\w匹配任何单个单词字符。因此,对于这些,要查找以 开头Aa和结尾的任何单词g,您可以使用\<Aa\w*g\>.的标准等效项\w[[:alnum:]_],因此\<Aa[[:alnum:]_]*g\>会稍微更便携。对于某些实现,您可能需要或 与的\bAa[[:alnum:]_]*g\b等效项。[[:<:]][[:>:]]

在标准中grep,您可以使用:

grep -E '(^|[^[:alnum:]_)Aa[[:alnum:]_]*g([^[:alnum:]_]|$)'

或者:

grep -x '\(.*[^[:alnum:]_]\)\{0,1\}Aa[[:alnum:]_]*g\([^[:alnum:]_].*\)\{0,1\}'

使用默认 BRE。

如果您grep支持-Pperl 正则表达式,那么

grep -P '\bAa\w*g\b'

或者:

grep -Pw 'Aa\w*g'

会工作。或者你可以使用真实的东西:

perl -ne 'print if /\bAa\w*g\b/'

(但请注意,默认情况下\w仅匹配 ASCII 字母)。

相关内容