Mit GNU grep:
echo 'Hi! Hi, same word twice twice, as as here here! ! ,123 123 need' | grep -Eo '(\b.+) \1\b'
Ausgabe:
twice twice as as here here 123 123
Optionen :
-E
:Interpretiere (\b.+) \1\b
als erweiterter regulärer Ausdruck.
-o
:Gibt nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Zeile aus, wobei jeder dieser Teile in einer separaten Ausgabezeile ausgegeben wird.
Regex :
\b
:Ist eine Wortgrenze mit der Breite null.
.+
:Entspricht einem oder mehreren Zeichen.
\1
:Die Klammern ()
markieren Sie eine Fanggruppe und \1
bedeutet hier den Wert aus der ersten einfangenden Gruppe verwenden.
Referenz:Häufig gestellte Fragen zu regulären Ausdrücken bei Stapelüberläufen
Es hört sich so an, als ob Sie Folgendes wollen (unter Verwendung eines beliebigen awk in einer beliebigen Shell auf jeder UNIX-Box):
$ cat tst.awk
BEGIN { RS=""; ORS="\n\n" }
{
head = prev = ""
tail = $0
while ( match(tail,/[[:alpha:]]+/) ) {
word = substr(tail,RSTART,RLENGTH)
head = head substr(tail,1,RSTART-1) (word == prev ? "" : word)
tail = substr(tail,RSTART+RLENGTH)
prev = word
}
print head tail
}
$ cat file
the quick quick brown
fox jumped jumped
jumped over the lazy
lazy dogs back
$ awk -f tst.awk file
the quick brown
fox jumped
over the lazy
dogs back
aber stellen Sie bitte eine neue Frage mit einer wirklich repräsentativeren Beispieleingabe und erwarteten Ausgabe, einschließlich Interpunktion, Unterschieden in der Großschreibung, mehreren Absätzen, doppelten Wörtern am Anfang/Ende von Sätzen und verschiedenen anderen nicht trivialen Fällen.