Grep: фильтрация вопроса

Я должен создать регулярное выражение, которое отфильтрует группу слов, которая начинает и заканчивается тем же словом. Например, the life of the free произведет the life of the и he was and he his the same произведет he was and he. Эти два слова должны быть максимальными 10 символов друг от друга.

0
задан 5 March 2015 в 19:40

2 ответа

Попробуйте grep расширенным регулярным выражением:

$ echo "the life of the free" | grep -Eo "(\b[[:alnum:]]+\b)([[:blank:]]|[[:alnum:]]){1,10}\1"
the life of the

$ echo "he was and he his the same" | grep -Eo "(\b[[:alnum:]]+\b)([[:blank:]]|[[:alnum:]]){1,10}\1"
he was and he

Здесь -E средства расширенный regexp, -o средства только печатают подобранную часть строки, \b соответствия граница слова, класс символов [[:alnum:]] средства все алфавитные (верхний регистр & нижний регистр) и числовые символы, [[:blank:]] пространство средств или вкладка, + средства одни или несколько случаев предыдущего соответствия, {1,10} предыдущее соответствие может произойти между 1 максимум с 10 раз, \1, средства соответствуют первой подобранной группе (выраженный между первой парой круглых скобок) т.е. \b[[:alnum:]]+\b.

1
ответ дан 3 August 2019 в 13:50

С PCRE можно сделать:

grep -Po '\b(\w+)\b.{1,10}\b\1\b'
  • -P включает регулярные выражения стиля Perl с помощью PCRE.
  • -o печать только подобранный текст.
  • \b метки граница слова
  • (\w+) группы соответствие словесных символов
  • .{1,10} соответствия до 10 символов и по крайней мере 1.
  • \1 относится к группе, подобранной ранее.
2
ответ дан 3 August 2019 в 13:50

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

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