我在使用带有以下选项的 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\}
,我不太明白它的作用。
如果有人能帮助我,我将不胜感激。
最佳答案
来自 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
的行中输出 aa
和 aaa
。为避免这种情况,您必须使用其他信息,例如示例换行符 ^
和 $
。
顺便说一句。我建议使用 -E
标志(或相同的 egrep
)以便扩展正则表达式支持。那时您不必转义括号。
输入
aaaaa
aaaa
aaa
aa
a
调用 grep -o -E '^a{2,3}$'
将给出输出:
aaa
aa
关于Linux Shell - Grep 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877380/