2012-05-15 11 views
7

Puramente accademico, ma mi sta frustrando.Rimuovere le parole duplicate in una riga con sed

voglio correggere questo testo:

there there are are multiple lexical errors in this line line 

utilizzando sed. I've got this lontano:

sed 's/\([a-z][a-z]*[ ,\n][ ,\n]*\)\1/\1/g' < file.text 

Corregge tutto tranne le parole raddoppiate finali!

there are multiple lexical errors in this line line 

Un guru di sed può spiegare perché quanto sopra non tratta le parole alla fine?

+0

N.B. RE - '[, \ n]' sed usa '\ n' come delimitatore di riga. Quindi, a meno che non si inseriscano '\ n' nello spazio del motivo, non si incontreranno mai dopo aver letto una linea nello spazio del motivo. – potong

risposta

10

Questo perché nell'ultimo caso (line) la memoria regolare 1 avrà line (riga seguita da uno spazio) e si sta cercando la sua ripetizione. Poiché non c'è spazio dopo l'ultimo line, la corrispondenza non riesce.

Per risolvere questo problema aggiungere uno spazio dopo la parola finale line.

In alternativa, è possibile modificare la regex per:

sed -e 's/\b\([a-z]\+\)[ ,\n]\1/\1/g' 

See it

Problemi correlati