нахождение шаблона (ab) * использующий grep

grep ab* filename.txt

Команда выше строк находок, которые запускаются с a и конец с любым количеством b. Например:

a
ab
abb
abb

Но как я фиксирую свою команду, таким образом, она находит строки как они?

ab
abab
abababab

Я попробовал grep (ab)* filename.txt, но это не сделает этого, потому что это совпадает с (ab | (ab) | (ab)).

-1
задан 26 January 2017 в 21:41

2 ответа

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

См. grep руководство для BRE по сравнению с ДО .

4
ответ дан 7 November 2019 в 02:32
$ 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).

0
ответ дан 7 November 2019 в 02:32

Другие вопросы по тегам:

Похожие вопросы: