user22712878 Asked: 2023-10-19 23:10:18 +0800 CST2023-10-19 23:10:18 +0800 CST 2023-10-19 23:10:18 +0800 CST grep 命令,查找以字母开头和结尾的单词 772 所以我明白,如果您想将单词的开头与特定字母匹配,您可以使用\<, ex, \<Aa。反之亦然,对于单词结尾,\>。您如何将这两个命令组合在一起? 例如,如果您\<Aag\>这样做,它将仅匹配该单词。有没有办法将这两个命令分开? regular-expression 1 个回答 Voted Best Answer Stéphane Chazelas 2023-10-19T23:29:45+08:002023-10-19T23:29:45+08:00 \<和\>运算符是一些非标准正则表达式运算符,在某些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 字母)。
\<
和\>
运算符是一些非标准正则表达式运算符,在某些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
,您可以使用:或者:
使用默认 BRE。
如果您
grep
支持-P
perl 正则表达式,那么或者:
会工作。或者你可以使用真实的东西:
(但请注意,默认情况下
\w
仅匹配 ASCII 字母)。