S GNU grep:
echo 'Hi! Hi, same word twice twice, as as here here! ! ,123 123 need' | grep -Eo '(\b.+) \1\b'
Výstup:
twice twice as as here here 123 123
Možnosti :
-E
:Interpretujte (\b.+) \1\b
jako rozšířený regulární výraz.
-o
:Vytiskne pouze odpovídající (neprázdné) části odpovídající řádky, přičemž každá taková část bude na samostatném výstupním řádku.
Regulační výraz :
\b
:Je hranice slova s nulovou šířkou.
.+
:Odpovídá jednomu nebo více znakům.
\1
:Závorky ()
označte snímací skupinu a \1
znamená, že zde použijte hodnotu z první skupiny zachycení.
Odkaz:Časté dotazy k regulárním výrazům přetečení zásobníku
Zní to, že něco takového je to, co chcete (pomocí libovolného awk v jakémkoli shellu na každém UNIXovém boxu):
$ 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
ale položte prosím novou otázku se skutečně reprezentativnějším vzorovým vstupem a očekávaným výstupem, včetně interpunkce, rozdílů v psaní velkých písmen, více odstavců, duplicitních slov na začátku/konci vět a jsou zobrazeny různé další netriviální případy.