linux Shell-grep命令

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (86)

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

aaaa
aaa
aa
a

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

aaaa
aaa
aa
a

因此,基本上,这个命令将显示包含一个或多个连续出现的字符“a”的行,对吗?

还有,grep 'a\{1,\} new会做同样的事情grep 'a\{1\}' new?因为我得到了相同的输出。

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

提问于
用户回答回答于

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因为前三个(或第二个)a。剩下的部分并不重要。

如果你真的想要的话a匹配,可以使用-o旗子。但要注意这会产生aaaaa从一行aaaaa。为了避免这种情况,必须使用其他信息,如示例行拆分中的信息。^$

我建议使用-E旗(或)egrep这是相同的),所以已经扩展了regex支持。那你就不用转义括号了。

输入

aaaaa
aaaa
aaa
aa
a

号召.grep -o -E '^a{2,3}$'将给出输出:

aaa
aa
用户回答回答于

grep 'a\{n,m\}' new意味着至少有n个a最多有m个a从新来的。

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

aaaa
aaa
aa

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

为.a{n,\}',省略m指任何大于或等于n

扫码关注云+社区

领取腾讯云代金券