I'm having a problem using grep with these options: \\{n\\}
, \\{n,\\}
and \\{n,m\\}
. I have a file named "new" with this lines:
aaaa
aaa
aa
a
When i use grep 'a\\{1\\}' new
i get this output:
aaaa
aaa
aa
a
So, basically, this command will show me the lines that include 1, or more, consecutive occurrences of the character "a" right?
Also, grep 'a\\{1,\\} new
will do the same thing as grep 'a\\{1\\}' new
? Because i get the same output for both.
The last one, \\{n,m\\}
, i cant really understand what it does.
I would really appreciate if anyone could help me out.
grep 'a\\{n,m\\}' new
means grepping at least n number of a
and at most m number of a
from new.
For example, grep 'a\\{2,3\\}' new
will output
aaaa
aaa
aa
the last line doesnot match because it only has ONE a
.
For a{n,\\}'
, omitting m
means any number larger than or equal to n
.
From 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.
That example grep 'a\\{2,3\\}' new
matches also the line with aaaa
because of the first three (or 2) a
. The rest of the line isn't important.
If you want that really only 2 or 3 consecutive a
are matched, you could use the -o
flag. But be aware that this would output aa
and aaa
from a line with aaaaa
. To avoid this you have to use additional information, like in the example line breakings ^
and $
.
Btw. I would suggest to use the -E
flag (or egrep
which is the same) so you have extended regex support. You don't have to escape the brackets then.
For input
aaaaa
aaaa
aaa
aa
a
a call of grep -o -E '^a{2,3}$'
will give the output:
aaa
aa
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.