Поиск двойного вхождения строки

Задание такое:

В файл data напишите выражение abbaxabaxabbax и напишите регулярное выражение для нахождения слова abbax таким образом, чтобы оно дважды совпадало в строке.

grep 'abbax{2}' data.txt не работает.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Используйте

grep 'abbax.*abbax' data.txt

Шаблон abbax.*abbax найдёт совпадение в строчке, в которой есть минимум два совпадения abbax.

См. пример работы скрипта:

s='abbaxabaxabbax
abbax
abaxabbax
abbax ab a x abbax xxxxx'
grep 'abbax.*abbax' <<< "$s"
# => abbaxabaxabbax
#    abbax ab a x abbax xxxxx

Если в сточке должно быть только два совпадения и не более, использйте

grep 'abbax.*abbax' data.txt | grep -v 'abbax.*abbax.*abbax'

Ещё один вариант с использованием регулярного выражения PCRE (для GNU grep):

grep -P '^(?!(.*abbax){3})(?:.*?abbax){2}' 

См. пример работы кода онлайн.

→ Ссылка