Convierte terminaciones de línea de DOS en terminaciones de línea de Linux en vim

Si abro archivos que creé en Windows, todas las líneas terminan con ^M
¿Cómo elimino estos personajes a la vez?

dos2unix es una utilidad de línea de comandos que hará esto, o :%s/^M//g hará si usa Ctrlv Ctrlm para ingresar el ^ M, o puede :set ff=unix y vim lo hará por tú.

Los documentos sobre la configuración ‘fileformat’ están aquí , y la wiki de vim tiene una página completa en las conversiones de final de línea .

Alternativamente, si mueve los archivos hacia adelante y hacia atrás mucho, es posible que no desee convertirlos, sino que haga lo siguiente :set ff=dos , para que vim sepa que es un archivo DOS y use las convenciones de DOS para los finales de línea.

Cambiar los line-end en la vista:

 :e ++ff=dos :e ++ff=mac :e ++ff=unix 

Esto también se puede usar como operación de guardado (: w solo no se guardará usando los line-end que ve en la pantalla):

 :w ++ff=dos :w ++ff=mac :w ++ff=unix 

Y puedes usarlo desde la línea de comandos:

 for file in $(ls *cpp) do vi +':w ++ff=unix' +':q' ${file} done 

Yo suelo usar

 :%s/\r/\r/g 

que parece un poco extraño, pero funciona debido a la forma en que vim coincide con los avances de línea. También me resulta más fácil de recordar 🙂

Prefiero usar el siguiente comando:

 :set fileformat=unix 

También puede usar mac o dos para convertir respectivamente su archivo a macintosh o convención de archivos de MS-DOS / MS-Windows. Y no hace nada si el archivo ya está en el formato correcto.

Para obtener más información, consulte la ayuda de vim:

 :help fileformat 
 :%s/\r+//g 

En Vim, eso elimina todos los retornos de carro y solo deja nuevas líneas.

:set fileformat=unix para convertir dos en unix.

dos2unix puede modificar directamente el contenido del archivo.

Puede usarlo directamente en el archivo, sin necesidad de redirección temporal de archivos.

 dos2unix input.txt input.txt 

Lo anterior usa el supuesto teclado de EE. UU. Use la opción - 437 para usar el teclado del Reino Unido.

 dos2unix -437 input.txt input.txt 

Convierte el directorio de archivos de DOS a Unix

Usando la línea de comando y sed, busca todos los archivos en el directorio actual con la extensión “.ext” y elimina todo “^ M”

@ https://gist.github.com/sparkida/7773170

 find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done; 

también, como se mencionó anteriormente ^ M = Ctrl + V + Ctrl + M (no solo escriba el símbolo “^” y M)

 tr -d '\15\32' < winfile.txt > unixfile.txt 

(ver: http://kb.iu.edu/data/acux.html )

Los siguientes pasos pueden convertir el formato de archivo de DOS a Unix:

 :e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1] :setlocal ff=unix This buffer will use LF-only line endings when written.[A 2] :w Write buffer using unix (LF-only) line endings. 

Referencia: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

Con el siguiente comando:

 :%s/^M$//g 

Haz que aparezca la ^M tipo Ctrl V y luego Ctrl M. Ctrl V le dice a Vim que tome el siguiente carácter ingresado literalmente.

El comentario sobre cómo mostrar el ^ M es lo que funcionó para mí. Simplemente escribiendo “^ M” en mi vi no obtuve nada (no encontrado). Sin embargo, la secuencia CTRL + V CTRL + M lo hizo perfectamente.

Mi comando de sustitución de trabajo fue

 :1,$s/Ctrl-V Ctrl-M/\r/g 

y se veía así en mi pantalla:

 :1,$s/^M/\r/g 
 :g/Ctrl-v Ctrl-m/s/// 

Ctrl M es el carácter \r , o retorno de carro, que las terminaciones de línea de DOS agregan. Ctrl V le dice a vim que inserte un carácter Ctrl M literal en la línea de comando.

Tomado como un todo, este comando reemplaza all \r por nada, eliminándolos de los extremos de las líneas.

Puedes usar:

 vim somefile.txt +"%s/\r/\r/g" +wq 

o la dos2unix utility .

Encontré una manera muy fácil: abra el archivo con nano: nano file.txt

Presione CTRL + O para guardar, pero antes de presionar Enter , presione: ALT + D para alternar entre finales de línea DOS y Unix / Linux, o: ALT + M para alternar entre finales de línea Mac y Unix / Linux y luego presione Enter para guardar y CTRL + X para salir.

Puede usar el siguiente comando:
:%s/^V^M//g
donde ‘^’ significa usar la tecla CTRL .

debajo del comando se usa para reformatear todo el archivo .sh en el directorio actual, lo probé en mi sistema operativo Fedora.

 for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done 

Por lo general, hay un comando dos2unix que puede usar para esto, solo asegúrese de leer el manual ya que las versiones GNU y BSD difieren en cómo manejan los argumentos.

Versión BSD:

 dos2unix $FILENAME $FILENAME_OUT mv $FILENAME_OUT $FILENAME 

Versión de GNU:

 dos2unix $FILENAME 

Alternativamente, puede crear su propio dos2unix con cualquiera de las respuestas propuestas aquí, por ejemplo:

 function dos2unix(){ [ "${!}" ] && [ -f "{$1}" ] || return 1; { echo ':set ff=unix'; echo ':wq'; } | vim "${1}"; } 

Sabía que había visto esto en alguna parte. Aquí está el consejo de inicio de sesión de FreeBSD:

¿Necesita eliminar todos esos ^ M caracteres de un archivo DOS? Tratar

 tr -d \\r < dosfile > newfile -- Originally by Dru  

En vim, escribe:

 :w !dos2unix % 

Esto canalizará el contenido de su búfer actual al comando dos2unix y escribirá los resultados sobre los contenidos actuales. Vim pedirá volver a cargar el archivo después

Aunque este tema es muy antiguo, me gustaría poner otra cosa de wikia:

 %s/\r\+$//g 

ese relleno encuentra todas las señales de retorno de carro (una y más repeticiones) hasta el final de la línea y elimina, por lo que simplemente \n se quedará en eol.

Esta es mi manera. Abrí un archivo en dos EOL y cuando guardo el archivo que se convertirá automáticamente a unix EOL

 autocmd BufWrite * :set ff=unix 

si crea un archivo en NotePad o NotePad ++ en Windows y lo lleva a Linux y lo abre por vim, verá ^ M al final de cada línea. Para eliminar esto,

En tu terminal de Linux, escribe

dos2unix nombre de archivo.ext

Esto hará la magia requerida.

Quería nuevas líneas en lugar de las ^ M’s. Perl al rescate:

 perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt 

O para escribir en stdout:

 perl -p -e 's/\x0d/\n/g' < excel_created.txt