繁体   English   中英

Linux Shell - Grep命令

[英]Linux Shell - Grep command

我在使用grep时遇到问题: \\{n\\}\\{n,\\}\\{n,m\\} 我有一个名为“new”的文件,其中包含以下行:

aaaa
aaa
aa
a

当我使用grep 'a\\{1\\}' new我得到这个输出:

aaaa
aaa
aa
a

所以,基本上,这个命令会显示包含1个或更多连续出现的字符“a”的行吗?

另外, grep 'a\\{1,\\} new会和grep 'a\\{1\\}' new做同样的事情吗? 因为我得到两个相同的输出。

最后一个, \\{n,m\\} ,我真的不明白它的作用。

如果有人能帮助我,我真的很感激。

grep 'a\\{n,m\\}' new表示从new中获取至少n个a和最多m个a
例如, grep 'a\\{2,3\\}' new将输出

aaaa
aaa
aa

最后一行不匹配,因为它只有a
对于a{n,\\}' ,省略m表示任何大于或等于n

man grep

   Repetition
       A regular expression may be  followed  by  one  of  several  repetition
       operators:
       ?      The preceding item is optional and matched at most once.
       *      The preceding item will be matched zero or more times.
       +      The preceding item will be matched one or more times.
       {n}    The preceding item is matched exactly n times.
       {n,}   The preceding item is matched n or more times.
       {n,m}  The  preceding  item  is  matched at least n times, but not more
              than m times.

那个例子grep 'a\\{2,3\\}' new匹配了aaaa的行,因为前三个(或2) a 其余部分并不重要。

如果你想要只匹配2或3个连续的a ,你可以使用-o标志。 但请注意,这将从aaaaa的一行输出aaaaa 为避免这种情况,您必须使用其他信息,例如示例换行符^$

顺便说一句。 我建议使用-E标志(或egrep是相同的),因此你有扩展的正则表达式支持。 您不必转义括号。

用于输入

aaaaa
aaaa
aaa
aa
a

grep -o -E '^a{2,3}$'的调用将给出输出:

aaa
aa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM