如何使用grep搜索特定出现次数的单词

如何使用grep搜索特定出现次数的单词

如何在文件中搜索与以下条件匹配的文本:以“x”开头,并且“x”之后紧接着至少有 1 个“a”,“a”之后紧接着最多有 2 个“a”。

我尝试过类似的东西

grep -i ^xa{1..2} textfile.txt

但我想我不明白它的用法

答案1

$ cat ip.txt 
xe
xa
xaaaalt
xaaa
xaa

$ # match 'a' 1 to 3 times
$ grep -i '^xa\{1,3\}' ip.txt
xa
xaaaalt
xaaa
xaa

$ # with ERE, no need to escape {}
$ grep -iE '^xa{1,3}' ip.txt
xa
xaaaalt
xaaa
xaa

为了防止匹配超过三个连续a匹配,您需要

$ grep -iE '^xa{1,3}([^a]|$)' ip.txt
xa
xaaa
xaa

$ # or lookarounds with PCRE
$ grep -iP '^xa{1,3}(?!a)' ip.txt
xa
xaaa
xaa

答案2

你很接近:

grep -i -E '^xaa{0,2}' textfile.txt

语法{n,m}( with,和 not ..)是扩展的正则表达式,因此是-E选项。{并且}需要加引号,这样 shell 就不会解释它们。

答案3

给定输入

1       x
2       xa
3       xaa
4       xaaa
5       xaaaa

第 2、3 和 4 行将由以下命令返回

grep -wE 'xa{1,3}'

扩展的正则表达式xa{1,3}将匹配x1 到 3 之间的任何内容a-w确保grep输入中的匹配文本是完整单词的选项(这就是不返回第 5 行的原因)。

相关内容