He estado tratando de descubrir cómo eliminar líneas duplicadas usando solo Sed y tengo problemas para descubrir cómo hacerlo.
Hasta ahora he probado esto y no ha funcionado.
sed '$!N; /^\(.*\)\n\1$/!P; D'expediente:
APPLE ORANGES BANANA BANANA COOKIES FRUITSLo que obtuve:
APPLE ORANGES BANANA BANANA COOKIES FRUITSLo que quiero:
APPLE ORANGES BANANA COOKIES FRUITSHe estado tratando de averiguar cómo hacerlo para no tener que revisar manualmente cada línea en un archivo y decirle que elimine manualmente los duplicados.
Mi objetivo es que esto eventualmente elimine la segunda instancia de BANANA.
¿Alguien puede señalarme en la dirección correcta?
Gracias
Usando sed
$ sed -n '/^$/d;G;/^\(.*\n\).*\n\1$/d;H;P;a\ ' input_file APPLE ORANGES BANANA COOKIES FRUITSEliminar líneas en blanco. Agregar espacio de espera. Si la línea está duplicada, elimínela; de lo contrario, cópiela en el espacio de espera, imprima e inserte líneas en blanco.
Esto podría funcionar para usted (GNU sed):
sed -E '1s/^/\n/;:a;N;s/((\n\S+)(\n\S+)*)\n\2$/\1/;$!ba;s/.//' fileEn la primera línea, inserte una nueva línea para fines de expresión regular.
Reúna las líneas en el espacio del patrón, eliminando los duplicados cuando se agreguen (más la línea vacía de antemano).
Al final del archivo, elimine la nueva línea introducida e imprima el resultado.
mmm eso es extraño, eso parece funcionar para mí. ¿Es porque tiene una línea vacía entre cada línea de texto?
~$ cat test.txt APPLES ORANAGES BANANA BANANA COOKIES FRUITS ~$ cat test.txt | sed '$!N; /^\(.*\)\n\1$/!P; D' APPLES ORANAGES BANANA COOKIES FRUITS