如何在文件中搜索与以下条件匹配的文本:以“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}
将匹配x
1 到 3 之间的任何内容a
。-w
确保grep
输入中的匹配文本是完整单词的选项(这就是不返回第 5 行的原因)。