我在使用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\}
,我真的不明白它是做什么的。
如果有人能帮我,我将不胜感激。
发布于 2013-11-09 23:28:52
来自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.
由于前三个(或两个) a
,该示例grep 'a\{2,3\}' new
也与aaaa
行匹配。这行的其余部分并不重要。
如果您真的希望只匹配2到3个连续的a
,您可以使用-o
标志。但请注意,这将从包含aaaaa
的一行输出aa
和aaa
。为了避免这种情况,您必须使用额外的信息,如示例换行^
和$
中的信息。
顺便说一句。我建议使用-E
标志(或同样的egrep
),这样您就扩展了对正则表达式的支持。那么你就不需要转义括号了。
对于输入
aaaaa
aaaa
aaa
aa
a
调用grep -o -E '^a{2,3}$'
将给出以下输出:
aaa
aa
发布于 2013-11-09 23:13:58
grep 'a\{n,m\}' new
表示从new中获取至少n个a
,最多m个a
。
例如,grep 'a\{2,3\}' new
将输出
aaaa
aaa
aa
最后一行不匹配,因为它只有一个a
。
对于a{n,\}'
,省略m
表示大于或等于n
的任何数字。
https://stackoverflow.com/questions/19877380
复制相似问题