grep ab* filename.txt
Команда выше строк находок, которые запускаются с a
и конец с любым количеством b
. Например:
a
ab
abb
abb
Но как я фиксирую свою команду, таким образом, она находит строки как они?
ab
abab
abababab
Я попробовал grep (ab)* filename.txt
, но это не сделает этого, потому что это совпадает с (ab | (ab) | (ab))
.
grep (ab)* filename.txt
тот выше не сделает этого, потому что это совпадает с (ab | (ab) | (ab)).
нет, это не будет работать, потому что ()
является особенным для большинства оболочек, и Вы получите синтаксическую ошибку:
$ grep (ab)* foo
bash: syntax error near unexpected token `('
Теперь, grep
Основные регулярные выражения (BRE) использования по умолчанию. К части группы выражения в BRE необходимо использовать \(...\)
:
$ echo xababx | grep -o '\(ab\)*'
abab
Или Расширенные регулярные выражения (ERE) использования или Совместимые с Perl регулярные выражения (PCRE), где (...)
достаточно:
$ echo abab | grep -Eo '(ab)*'
abab
$ echo abab | grep -Po '(ab)*'
abab
$ more ~/tmp/test_grep.txt
ab
abab
abababab
abaab
aba
$ grep -e '^\(ab\)\+ -e
опция заключается в использовании регулярного выражения. Выражение ^(ab)+$
, с помощью которого ^
начинается в начале строки, +
говорит повторить группу (ab)
, а $
говорит, что она заканчивается после (ab)
.
~/tmp/test_grep.txt
ab
abab
abababab
-e
опция заключается в использовании регулярного выражения. Выражение ^(ab)+$
, с помощью которого ^
начинается в начале строки, +
говорит повторить группу (ab)
, а $
говорит, что она заканчивается после (ab)
.