所以我明白,如果您想将单词的开头与特定字母匹配,您可以使用\<
, ex, \<Aa
。反之亦然,对于单词结尾,\>
。您如何将这两个命令组合在一起?
例如,如果您这样做,\<Aag\>
它将仅匹配该单词。有没有办法将这两个命令分开?
答案1
\<
和\>
运算符是一些非标准正则表达式运算符,在某些grep
带或不带 的实现中作为扩展找到-E
。
在大多数实现中,它们分别在非单词字符(或主题的开头)和单词字符之间的边界以及单词字符和非单词字符(或主题的结尾)之间的边界进行匹配,单词字符是字母数字字符或下划线。
一些grep
/regexp 实现具有[[:<:]]
和[[:>:]]
来代替,而一些实现则具有\b
(来自 perl)匹配任一类型的边界。
那些支持其中任何一个的人通常也支持-w
与单词匹配的选项。
\<Aag\>
内部匹配foo-Aag
为和\<
之间的匹配,以及主题之间和 之间的匹配(主题是 的行)。-
A
\>
g
grep
一些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
支持-P
perl 正则表达式,那么
grep -P '\bAa\w*g\b'
或者:
grep -Pw 'Aa\w*g'
会工作。或者你可以使用真实的东西:
perl -ne 'print if /\bAa\w*g\b/'
(但请注意,默认情况下\w
仅匹配 ASCII 字母)。