Grep 正则表达式中的单词

Grep 正则表达式中的单词,grep,Grep,我可以用什么样的模式在一行中找到n个长度的单词 我想做: grep -ni ' '[a-z][a-z][a-z][a-z][a-z][a-z]' ' filename 但这并不考虑在行首或行尾匹配一个6个字母的单词。 是否有方法匹配空格或行的开头/结尾?还有没有一种方法可以查找[a-z]n次模式,而不是键入n次 我知道^表示行的开头,$表示行的结尾 例如,我想要的一些伪脚本: #match a word of n length(n consecutive letters) grep -ni ^

我可以用什么样的模式在一行中找到n个长度的单词

我想做:

grep -ni ' '[a-z][a-z][a-z][a-z][a-z][a-z]' ' filename
但这并不考虑在行首或行尾匹配一个6个字母的单词。 是否有方法匹配
空格
或行的
开头/结尾
?还有没有一种方法可以查找[a-z]n次模式,而不是键入n次

我知道
^
表示行的开头,
$
表示行的结尾

例如,我想要的一些伪脚本:

#match a word of n length(n consecutive letters)
grep -ni ^ OR [:space:][a-z]{n consecutive times}[:space:] OR $ filename 

GNU grep具有单词开头和单词结尾匹配运算符
\

结合扩展正则表达式中的
{N}
重复运算符,这意味着您可以使用

egrep -i '\<[a-z]{6}\>'
您应该了解这些方法之间的行为差异。单词边界出现在标点符号处,而不仅仅是空格处,因此如果使用
\
(或者perl-ish
\b
\b
,它们是GNU grep的最新添加项),那么您还将匹配句子末尾的单词,后面是点而不是空格


这可能是好的,但坏的一面是你会匹配
不会
,因为
不会
是6个字母,撇号是单词的边界。

GNU grep有单词的开头和结尾匹配操作符
\

结合扩展正则表达式中的
{N}
重复运算符,这意味着您可以使用

egrep -i '\<[a-z]{6}\>'
您应该了解这些方法之间的行为差异。单词边界出现在标点符号处,而不仅仅是空格处,因此如果使用
\
(或者perl-ish
\b
\b
,它们是GNU grep的最新添加项),那么您还将匹配句子末尾的单词,后面是点而不是空格

这可能是好的,但坏的一面是你会匹配
不会
,因为
不会
是6个字母,撇号是单词的边界。

这个正则表达式:

\b\w{6}\b
。。。匹配单词边界(可以是像
[a-z]
这样的单词字符和像
'
这样的非单词字符之间的过渡,或者是一行的开头或结尾),后跟六个单词字符,后跟另一个单词边界。您需要
egrep
grep-E
,因为
{6}
是扩展的正则表达式语法:

egrep -ni '\b\w{6}\b' filename
如果您不想匹配数字和下划线,可以将
\w
替换为
[a-z]

此正则表达式:

\b\w{6}\b
。。。匹配单词边界(可以是像
[a-z]
这样的单词字符和像
'
这样的非单词字符之间的过渡,或者是一行的开头或结尾),后跟六个单词字符,后跟另一个单词边界。您需要
egrep
grep-E
,因为
{6}
是扩展的正则表达式语法:

egrep -ni '\b\w{6}\b' filename

如果您不想匹配数字和下划线,可以将
\w
替换为
[a-z]

大多数grep实现都有一个
-w
选项,无论匹配的子字符串是在行的开头,还是前面有一个非单词组成字符,或在行尾或后跟非单词组成字符。单词组成字符是字母、数字和下划线,至少在我使用的grep实现中是这样

因此:

这使您不需要使用单词边界,根据我的经验,grep并不总是支持这种边界。(
-i
选项使匹配不区分大小写。)


我们使用
egrep
而不是
grep
来计算“扩展”正则表达式,而不是“基本”正则表达式。几乎每个grep都会理解这两个问题。如果您对可移植性感兴趣,请避免使用PCRE(
grep-P
)。

大多数grep实现都有一个

-w
选项,无论匹配的子字符串是在行首,还是在行尾,还是在行尾,或者后跟非单词组成字符。单词组成字符是字母、数字和下划线,至少在我使用的grep实现中是这样

因此:

这使您不需要使用单词边界,根据我的经验,grep并不总是支持这种边界。(
-i
选项使匹配不区分大小写。)


我们使用
egrep
而不是
grep
来计算“扩展”正则表达式,而不是“基本”正则表达式。几乎每个grep都会理解这两个问题。如果您对可移植性感兴趣,请避免使用PCRE(
grep-P
);为什么不
\
?它们看起来比
\b
更好,而且你正在做一些不可移植的事情。@WumpusQ.Wumbley我碰巧更习惯
\b
(作为一个蟒蛇,而不是一个普通人),所以我首先想到了这一点。我不会费心添加到我的答案中,因为你的(投票)涵盖了它;为什么不
\
?它们看起来比
\b
更好,而且你正在做一些不可移植的事情。@WumpusQ.Wumbley我碰巧更习惯
\b
(作为一个蟒蛇,而不是一个普通人),所以我首先想到了这一点。我不想费心补充我的答案,因为你的(投票结果)涵盖了这一点。