Dengan grep GNU:
echo 'Hi! Hi, same word twice twice, as as here here! ! ,123 123 need' | grep -Eo '(\b.+) \1\b'
Keluaran:
twice twice as as here here 123 123
Opsi :
-E
:Menafsirkan (\b.+) \1\b
sebagai ekspresi reguler yang diperluas.
-o
:Cetak hanya bagian yang cocok (tidak kosong) dari garis yang cocok, dengan masing-masing bagian tersebut pada garis keluaran yang terpisah.
Regex :
\b
:Adalah batas kata dengan lebar nol.
.+
:Mencocokkan satu atau beberapa karakter.
\1
:Tanda kurung ()
tandai grup penangkap dan \1
berarti gunakan di sini nilai dari grup penangkap pertama.
Referensi:FAQ Ekspresi Reguler Stack Overflow
Kedengarannya seperti inilah yang Anda inginkan (menggunakan awk apa pun di shell apa pun di setiap kotak UNIX):
$ 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
tetapi harap ajukan pertanyaan baru dengan masukan sampel yang lebih representatif dan keluaran yang diharapkan termasuk tanda baca, perbedaan kapitalisasi, banyak paragraf, kata duplikat di awal/akhir kalimat, dan berbagai kasus non-sepele lainnya ditampilkan.