traduccion end crlf carriage windows linux end-of-line

windows - end - line feed character



Cómo convertir el final de línea de Windows en el fin de línea de Unix(CR/LF a LF) (8)

¿Has probado el guión python de Bryan Maupin que se encuentra aquí ? (Lo he modificado un poco para que sea más genérico)

#!/usr/bin/env python import sys input_file_name = sys.argv[1] output_file_name = sys.argv[2] input_file = open(input_file_name) output_file = open(output_file_name, ''w'') line_number = 0 for input_line in input_file: line_number += 1 try: # first try to decode it using cp1252 (Windows, Western Europe) output_line = input_line.decode(''cp1252'').encode(''utf8'') except UnicodeDecodeError, error: # if there''s an error sys.stderr.write(''ERROR (line %s):/t%s/n'' % (line_number, error)) # write to stderr try: # then if that fails, try to decode using latin1 (ISO 8859-1) output_line = input_line.decode(''latin1'').encode(''utf8'') except UnicodeDecodeError, error: # if there''s an error sys.stderr.write(''ERROR (line %s):/t%s/n'' % (line_number, error)) # write to stderr sys.exit(1) # and just keep going output_file.write(output_line) input_file.close() output_file.close()

Puedes usar esa secuencia de comandos con

$ ./cp1252_utf8.py file_cp1252.sql file_utf8.sql

Soy un desarrollador de Java y estoy usando Ubuntu para desarrollar. El proyecto se creó en Windows con Eclipse y está usando la codificación CP1252.

Para convertir a UTF-8 he usado el programa de recodificación:

find Web -iname /*.java | xargs recode CP1252...UTF-8

este comando da este error:

recode: Web/src/br/cits/projeto/geral/presentation/GravacaoMessageHelper.java failed: Ambiguous output in step `CR-LF..data

Me he referido al problema y obtengo la solución aquí: http://fvue.nl/wiki/Bash_and_Windows#Recode:_Ambiguous_output_in_step_.60data..CR-LF.27 y dice:

Convierta los finales de línea de CR / LF a un solo LF: edite el archivo con vim, dé el comando: configure ff = unix y guarde el archivo. Recode ahora debería ejecutarse sin errores.

Bien, pero tengo muchos archivos para eliminar el carácter CR / LF, no puedo abrir cada uno para hacerlo. Vi no proporciona ninguna opción a la línea de comando para operaciones de bash.

sed se puede usar para hacer esto? Cómo ?

Thankx =)


Debería haber un programa llamado dos2unix que arreglará las terminaciones de línea para usted. Si aún no está en su caja Linux, debería estar disponible a través del administrador de paquetes.


El comando tr también puede hacer esto:

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

y debería estar disponible para ti.

Tendrá que ejecutar tr desde dentro de un script, ya que no puede funcionar con nombres de archivo. Por ejemplo, crea un archivo myscript.sh:

#!/bin/bash cd ${1} for f in `find -iname /*.java`; do echo $f tr -d ''/15/32'' < $f > $f.tr mv $f.tr $f recode CP1252...UTF-8 $f done

La ejecución de myscript.sh Web procesará todos los archivos java en la carpeta web.


En realidad, vim permite lo que estás buscando. Ingrese vim y escriba los siguientes comandos:

:args **/*.java :argdo set ff=unix | update | next

El primero de estos comandos establece la lista de argumentos para cada archivo que coincida con **/*.java , que son todos los archivos Java, recursivamente. El segundo de estos comandos hace lo siguiente para cada archivo en la lista de argumentos, a su vez:

  • Establece los finales de línea al estilo Unix (ya lo sabes)
  • Escribe el archivo si ha sido cambiado
  • Procede al siguiente archivo

Para superar

Ambiguous output in step `CR-LF..data''

la solución simple podría ser agregar -f indicador para forzar la conversión.


Regrese a Windows, dígale a Eclipse que cambie la codificación a UTF-8, luego regrese a Unix y ejecute d2u en los archivos.


Voy a hacer una pequeña excepción a la respuesta de Jichao. En realidad, puede hacer todo lo que acaba de hablar con bastante facilidad. En lugar de buscar un / n, simplemente busque el feed de formulario al final de la línea.

sed -i ''s//r$//'' ${FILE_NAME}

Para cambiar de Unix a dos, simplemente busque el último carácter en la línea y agregue un avance de formulario. (Añadiré -r para hacer esto más fácil con expresiones regulares de grep).

sed -ri ''s/(.)$//1/r/'' ${FILE_NAME}

Teóricamente, el archivo podría cambiarse al estilo mac añadiendo código al último ejemplo que también anexa la siguiente línea de entrada a la primera línea hasta que todas las líneas hayan sido procesadas. Sin embargo, no intentaré dar ese ejemplo aquí.

Advertencia: -i cambia el archivo real. Si desea que se realice una copia de seguridad, agregue una cadena de caracteres después de -i. Esto moverá el archivo existente a un archivo con el mismo nombre con los caracteres agregados al final.


sed no puede coincidir / n porque la nueva línea final se elimina antes de que la línea se coloque en el espacio del patrón, pero puede coincidir con / r, por lo que puede convertir / r / n (dos) a / n (unix) quitando / r

sed -i ''s//r//g'' file

Advertencia: esto cambiará el archivo original

Sin embargo, no puede cambiar de unix EOL a dos o viejo mac (/ r) por esto. Más lecturas aquí:

¿Cómo puedo reemplazar una nueva línea (/ n) usando sed?