Grep 正则表达式中的单词
我可以用什么样的模式在一行中找到n个长度的单词 我想做: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 ^
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
(作为一个蟒蛇,而不是一个普通人),所以我首先想到了这一点。我不想费心补充我的答案,因为你的(投票结果)涵盖了这一点。