首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linux Shell - Grep命令

Linux Shell - Grep命令
EN

Stack Overflow用户
提问于 2013-11-09 23:01:51
回答 2查看 1.4K关注 0票数 1

我在使用grep和以下选项时遇到了问题:\{n\}\{n,\}\{n,m\}。我有一个名为"new“的文件,其中有以下几行:

代码语言:javascript
复制
aaaa
aaa
aa
a

当我使用grep 'a\{1\}' new时,我得到以下输出:

代码语言:javascript
复制
aaaa
aaa
aa
a

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

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

最后一个,\{n,m\},我真的不明白它是做什么的。

如果有人能帮我,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-09 23:28:52

来自man grep

代码语言:javascript
复制
   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.

由于前三个(或两个) a,该示例grep 'a\{2,3\}' new也与aaaa行匹配。这行的其余部分并不重要。

如果您真的希望只匹配2到3个连续的a,您可以使用-o标志。但请注意,这将从包含aaaaa的一行输出aaaaa。为了避免这种情况,您必须使用额外的信息,如示例换行^$中的信息。

顺便说一句。我建议使用-E标志(或同样的egrep ),这样您就扩展了对正则表达式的支持。那么你就不需要转义括号了。

对于输入

代码语言:javascript
复制
aaaaa
aaaa
aaa
aa
a

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

代码语言:javascript
复制
aaa
aa
票数 2
EN

Stack Overflow用户

发布于 2013-11-09 23:13:58

grep 'a\{n,m\}' new表示从new中获取至少n个a,最多m个a

例如,grep 'a\{2,3\}' new将输出

代码语言:javascript
复制
aaaa
aaa
aa

最后一行不匹配,因为它只有一个a

对于a{n,\}',省略m表示大于或等于n的任何数字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19877380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档