txt script salto retorno quitar por linea insertar especiales eliminar consola carro caracteres caracter cambiar batch unix carriage-return

unix - script - quitar salto de linea consola linux



Eliminar retorno de carro en Unix (16)

¿Cuál es la forma más simple de eliminar todos los retornos de carro de un archivo en Unix?


Alguien más recomienda dos2unix y también lo recomiendo encarecidamente. Solo estoy brindando más detalles.

Si está instalado, salte al próximo paso. Si aún no está instalado, recomendaría instalarlo a través de yum como:

yum install dos2unix

Entonces puedes usarlo como:

dos2unix fileIWantToRemoveWindowsReturnsFrom.txt


Aquí está la cosa,

%0d es el carácter de retorno de carro. Para que sea compatabile con Unix. Necesitamos usar el siguiente comando.

dos2unix fileName.extension fileName.extension


Hay una utilidad llamada dos2unix que existe en muchos sistemas, y se puede instalar fácilmente en la mayoría.


He usado Python para eso, aquí mi código;

end1=''/home/.../file1.txt'' end2=''/home/.../file2.txt'' with open(end1, "rb") as inf: with open(end2, "w") as fixed: for line in inf: line = line.replace("/n", "") line = line.replace("/r", "") fixed.write(line)


La forma más sencilla en Linux es imho

sed -i ''s//r//g'' <filename>

Las comillas fuertes alrededor del operador de sustitución ''s//r//'' son esenciales . Sin ellos, el intérprete de comandos interpretará como un escape + r y lo reducirá a una r simple, y eliminará todos los casos más bajos r . Es por eso que la respuesta dada anteriormente en 2009 por Rob no funciona.

Y agregar el modificador /g asegura que incluso múltiples /r serán eliminados, y no solo el primero.


Para UNIX ... noté que dos2unix eliminó los encabezados Unicode de mi archivo UTF-8. Bajo git bash (Windows), el siguiente script parece funcionar muy bien. Utiliza sed. Tenga en cuenta que solo elimina los retornos de carro al final de las líneas y conserva los encabezados Unicode.

#!/bin/bash inOutFile="$1" backupFile="${inOutFile}~" mv --verbose "$inOutFile" "$backupFile" sed -e ''s//015$//g'' <"$backupFile" >"$inOutFile"


Si está ejecutando un entorno X y tiene un editor adecuado (código de estudio visual), entonces seguiría la recomendación:

Código de Visual Studio: cómo mostrar finales de línea

Simplemente ve a la esquina inferior derecha de tu pantalla, el código del estudio visual te mostrará tanto la codificación del archivo como la convención de fin de línea seguida del archivo, y con solo un clic podrás cambiar eso.

Simplemente use el código visual como su reemplazo para el bloc de notas ++ en un entorno Linux y está listo para funcionar.


Si está utilizando un sistema operativo (como OS X) que no tiene el comando dos2unix pero tiene un intérprete de Python (versión 2.5+), este comando es equivalente al comando dos2unix :

python -c "import sys; import fileinput; sys.stdout.writelines(line.replace(''/r'', ''/n'') for line in fileinput.input(mode=''rU''))"

Esto maneja tanto los archivos con nombre en la línea de comando como los pipes y los redirects, al igual que dos2unix . Si agrega esta línea a su archivo ~ / .bashrc (o un archivo de perfil equivalente para otros shells):

alias dos2unix="python -c /"import sys; import fileinput; sys.stdout.writelines(line.replace(''/r'', ''/n'') for line in fileinput.input(mode=''rU''))/""

... la próxima vez que inicie sesión (o ejecute source ~/.bashrc en la sesión actual) podrá usar el nombre dos2unix en la línea de comando de la misma manera que en los otros ejemplos.


Si usted es usuario de Vi, puede abrir el archivo y eliminar el retorno de carro con:

:%s//r//g

o con

:1,$ s/^M//

Tenga en cuenta que debe escribir ^ M presionando ctrl-v y luego ctrl-m.


Una vez más una solución ... Porque siempre hay uno más:

perl -i -pe ''s//r//'' filename

Es bueno porque está en su lugar y funciona en todos los sabores de Unix / Linux con los que he trabajado.


Vieja escuela:

tr -d ''/r'' < filewithcarriagereturns > filewithoutcarriagereturns


Voy a suponer que quiere decir retornos de carro ( CR , "/r" , 0x0d ) al final de las líneas en lugar de solo a ciegas dentro de un archivo (puede que los tenga en medio de cadenas por lo que sé). Usar este archivo de prueba con un CR al final de la primera línea solamente:

$ cat infile hello goodbye $ cat infile | od -c 0000000 h e l l o /r /n g o o d b y e /n 0000017

dos2unix es el camino a seguir si está instalado en su sistema:

$ cat infile | dos2unix -U | od -c 0000000 h e l l o /n g o o d b y e /n 0000016

Si por alguna razón dos2unix no está disponible para usted, entonces sed lo hará:

$ cat infile | sed ''s//r$//'' | od -c 0000000 h e l l o /n g o o d b y e /n 0000016

Si por alguna razón, sed no está disponible para ti, entonces ed lo hará, de una manera complicada:

$ echo '',s//r/n//n/ > w !cat > Q'' | ed infile 2>/dev/null | od -c 0000000 h e l l o /n g o o d b y e /n 0000016

Si no tiene ninguna de esas herramientas instaladas en su caja, tiene problemas mayores que tratar de convertir archivos :-)


intente esto para convertir dos archivos en un archivo Unix:

archivo fromdos


simplemente puedes hacer esto:

$ echo $(cat input) > output


sed -is//r// <filename> o somesuch; ver man sed o la gran cantidad de información disponible en la web sobre el uso de sed .

Una cosa para señalar es el significado preciso de "retorno de carro" en el anterior; si realmente quiere decir el carácter de control único "retorno de carro", entonces el patrón anterior es correcto. Si se refería, en términos más generales, a CRLF (retorno de carro y un avance de línea, que es cómo se implementan las alimentaciones de línea en Windows), entonces es probable que desee reemplazar /r/n lugar. Las alimentaciones de línea desnuda (línea nueva) en Linux / Unix son /n .


tr -d ''/r'' < infile > outfile

Ver tr(1)