Soy un desarrollador de Java y estoy usando Ubuntu para desarrollar. El proyecto se creó en Windows con Eclipse y utiliza la codificación Windows-1252 .
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
Lo busqué y obtuve la solución en Bash y Windows, Recode: Salida ambigua en el paso `data..CR-LF ' y dice:
Convierta los finales de línea de CR / LF a un solo LF: Edite el archivo con Vim, dé el comando
:set ff=unixy guarde el archivo. Recode ahora debería ejecutarse sin errores.
Bien, pero tengo muchos archivos para eliminar el carácter CR / LF, y no puedo abrir cada uno para hacerlo. Vi no proporciona ninguna opción de línea de comandos para operaciones Bash.
¿Se puede usar sed para hacer esto? ¿Cómo?
windows
linux
end-of-line
MaikoID
fuente
fuente

recodeproduce este error al intentar recodificar un archivo con codificación de nueva línea DOS (\r\n- CRLF) y Unix (\nLF) mixtos . Lamentablementefromdos, anteriormente un binario, actualmente es un alias para recodificar el que tiene este problema.vim +ex_command_one +ex_command_two ... fileawksolución en las respuestas.Respuestas:
Debería haber un programa llamado
dos2unixque arregle los finales de línea por usted. Si aún no está en su caja de Linux, debería estar disponible a través del administrador de paquetes.fuente
fromdoses solo un alias derecode, y eso producirá el error OP mencionado en archivos con codificación DOS mixta (\ r \ n - CRLF) y unix (\ n LF). Solodos2unixfunciona universalmente.find ./ -name "*.java" -exec dos2unix {} +.sed no puede coincidir con \ 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) eliminando \ r
Advertencia: esto cambiará el archivo original
Sin embargo, no puede cambiar de unix EOL a dos o mac antiguo (\ r) con esto. Más lecturas aquí:
¿Cómo puedo reemplazar una nueva línea (\ n) usando sed?
fuente
sed -icambiará el archivo original ! Debido a que la gente no esperaríasedcomportarse así, la advertencia es apropiada aquí. No mucha gente lo sabe,-iasí que lo intentaránsed -i ... file > file2y no esperarán que se modifique el archivo original.sedvariantes reconocen la secuencia simbólica no estándar\r. Pruebe con un carácter literal ctrl-M en ese caso (en muchos shells, escriba ctrl-V ctrl-M para producir el carácter de control literal).De hecho, vim permite lo que estás buscando. Ingrese vim y escriba los siguientes comandos:
El primero de estos comandos establece la lista de argumentos para cada coincidencia de archivos
**/*.java, que son todos los archivos Java, de forma recursiva. El segundo de estos comandos hace lo siguiente para cada archivo en la lista de argumentos, a su vez:fuente
dos2unixen un bucle for, ¡pero aún es bueno saber cómo hacerlo en Vim!El comando tr también puede hacer esto:
y debería estar disponible para usted.
Deberá ejecutar tr desde dentro de un script, ya que no puede funcionar con nombres de archivo. Por ejemplo, cree un archivo myscript.sh:
La ejecución
myscript.shprocesará todos los archivos java en el directorio actual y sus subdirectorios.fuente
Haré una pequeña excepción a la respuesta de jichao. De hecho, puedes hacer todo lo que acaba de mencionar con bastante facilidad. En lugar de buscar un
\n, simplemente busque el retorno de carro al final de la línea.Para cambiar de unix a dos, simplemente busque el último carácter en la línea y agregue un formulario de alimentación. (Agregaré
-rpara facilitar esto con expresiones regulares grep).En teoría, el archivo podría cambiarse al estilo mac agregando código al último ejemplo que también agrega la siguiente línea de entrada a la primera línea hasta que se hayan procesado todas las líneas. Sin embargo, no intentaré dar ese ejemplo aquí.
Advertencia: -i cambia el archivo real. Si desea realizar una copia de seguridad, agregue una cadena de caracteres después
-i. Esto moverá el archivo existente a un archivo con el mismo nombre con tus personajes agregados al final.fuente
sed -i 's/$/\r/' ${FILE_NAME}...-ropción no es portátil; sisedno lo tiene, quizás intente-E.Para superar
simplemente la solución podría ser agregar una
-fbandera para forzar la conversión.fuente
¿ Probaste el script de Python de Bryan Maupin que se encuentra aquí ? (Lo modifiqué un poco para que sea más genérico)
Puedes usar ese script con
fuente
Vuelva a Windows, dígale a Eclipse que cambie la codificación a UTF-8, luego vuelva a Unix y ejecute
d2ulos archivos.fuente
fromdosen 10.04 y es parte del paquetetofrodos.