[英]ubuntu linux shell scripting with command line grep and split delimiter
[英]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
的一行输出aa
和aaa
。 为避免这种情况,您必须使用其他信息,例如示例换行符^
和$
。
顺便说一句。 我建议使用-E
标志(或egrep
是相同的),因此你有扩展的正则表达式支持。 您不必转义括号。
用于输入
aaaaa
aaaa
aaa
aa
a
grep -o -E '^a{2,3}$'
的调用将给出输出:
aaa
aa
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.