Как grep или egrep слова, которые появляются два раза подряд?

Привет, я хочу знать, как grep строки, в которых слово повторяется дважды подряд. Пробел между двумя словами, очевидно, должен быть учтен, и он должен быть чувствительным к регистру, что я считаю grep естественно есть.

Я не просто хочу получить ответ, а хочу знать, как это сделать и понять. Таким образом, любой, кто ответит, мог бы также объяснить, что говорит линия или что делает шаблон. У меня есть базовое или среднее понимание grep а также bash Однако все еще изучает все тонкости grep и коррелирующий синтаксис. Любая помощь будет высоко ценится.

Это так близко, как я не получил LOL, хотя я также не уверен, что именно я здесь делаю...

grep '.*\|.*\| '

Спасибо всем!! Ура!

2 ответа

\1 соответствует каждой строке, которая была сопоставлена ​​первой найденной строке. Это не то же самое, что сопоставление с тем же шаблоном, который был сопоставлен с первой строкой. Таким образом, первое совпадение на границе слова больше не актуально, даже если \ b находится внутри скобок захвата.

Если вы хотите, чтобы второй экземпляр тоже находился на границе слова, вы должны это сказать.

Также, используя регулярные выражения, мы можем сказать, что хотим все маленькие слова az и большие слова AZ. Также с помощью + мы говорим, что предыдущие символы соответствуют по крайней мере 1 или более раз.

egrep "(\b[a-zA-Z]+) \1\b" file.txt

Это покажет вам все слова, которые используются дважды.

grep -E "(\b[a-zA-Z]+) \1\b" file.txt

Эта команда также будет работать, если вы предпочитаете использовать grep. grep -E означает, что он использует расширенные регулярные выражения. Так что это так же, как egrep.

Вы бы использовали grep -E '(\<[^[:blank:]]+\>).*\1'

\< а также \> представляют границы слов. Вместе с последовательностью непустых символов, которые образуют одно слово. Тогда \1 напоминает, что первый набор захватывает скобки.

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