如何使用 grep 和正则表达式来匹配特定长度的单词?

How can I use grep and regex to match a word with specific length?

提问人:BubbleMonster 提问时间:9/24/2015 最后编辑:MarounBubbleMonster 更新时间:9/25/2015 访问量:22776

问:

我正在使用 Linux 的终端,我有一个单词列表,其中包含以下单词:

filers
filing
filler
filter
finance
funky
fun
finally
futuristic
fantasy
fabulous
fill
fine

我想做一个 grep 和一个正则表达式来匹配前两个字母“fi”的查找单词,并且只显示总共 6 个字符的单词。

我试过:

cat wordlist | grep "^fi" 

这显示了以 fi 开头的单词。

然后我尝试了:

cat wordlist | grep -e "^fi{6}"
cat wordlist | grep -e "^fi{0..6}" 

还有很多,但它并没有带来任何结果。谁能为我指出正确的方向?

正则表达式 bash grep

评论


答:

2赞 Maroun 9/24/2015 #1

试试这个:

grep -P "^fi.{4,}"

请注意,由于您已经有“fi”,因此您只需要至少 4 个字符。

.表示任何字符,并且要匹配该字符 4 次或更多次。{4,}

如果您像在示例中那样编写,则会尝试匹配以 开头的字符串,后跟 6 秒。grep -e "^fi{6}"fi

评论

0赞 BubbleMonster 9/24/2015
感谢您的回答,但是当我在 3 之后加上逗号时,它会向我显示超过 6 个字符的单词。当我删除逗号时,它会给我我正在寻找的单词。
0赞 Maroun 9/24/2015
@BubbleMonster 如果你正好想要 6,那么是的。您需要删除逗号。逗号表示一个范围,删除它将产生确切的结果。
7赞 choroba 9/24/2015 #2

它还有另外四个字符:fi

grep '^fi....$'

或更短

grep '^fi.\{4\}$'

grep -E '^fi.{4}$'

$匹配项在行的末尾。

评论

1赞 stuXnet 9/24/2015
您在上一个正则表达式中忘记了 - 现在它会匹配.^fiiii$
1赞 choroba 9/24/2015
@stuXnet:谢谢,已修复。
3赞 Zoltan Ersek 9/24/2015 #3

溶液:

cat wordlist | grep -e "^fi.{4}$"

您的尝试:

cat wordlist | grep -e "^fi{6}"

这意味着 f 和 i 六次,上面添加的点表示任何字符,所以它是 fi 和任何字符 4 次。我还加了一个 $ 来标记行的末尾。

评论

0赞 tripleee 9/24/2015
不,这意味着 f 后跟六个实例,如果 i。