2012-09-20 15 views

Respuesta

18
grep -URl ^M . | xargs fromdos 

grep se obtiene una lista de todos los archivos del directorio actual que tienen los finales de línea de DOS.

-U hace grep consideran finales de línea en lugar de despojarlas de distancia por defecto

-R hace que sea recursiva

-l hace que la lista sólo los nombres de archivo y no las líneas coincidentes

entonces estás tuberías esa lista en el comando del convertidor (que es fromdos en ubuntu, dos2unix de donde vengo).

NOTA: en realidad no escriba ^M. en su lugar, deberá presionar <Ctrl-V> y luego <Ctrl-M> para insertar el carácter ^M y hacer que grep comprenda lo que está buscando. o bien, puede escribir $'\r' en lugar de ^M (pero creo que eso solo puede funcionar para bash ...).

+1

grep -URl^M. | xargs fromdos? – Dalinaum

+5

El paquete de Ubuntu, para la instalación, se llama "tofrodos". – Apalala

+0

En tcsh, y probablemente en csh también, puede obtener el mismo efecto con 'grep -URl" \ r ". | xargs fromdos'. – bdesham

0

puede utilizar el comando:

dos2ux file.in>file.out or: 

en Perl:

perl -pi -e 's/\r//g' your_file 

alternativa, se puede hacer:

  • abierta en vi
  • ir al modo de comando
  • tipo :%s/[ctrl-V][CTRL-M]//g
0

Nota si va a convertir archivos de múltiples bytes es necesario tomar cuidado adicional, y probablemente debería tratar de usar el iconv correcto o recodificar las especificaciones de codificación.

Si se trata de un archivo ASCII simple, los dos métodos siguientes funcionarían.

El programa flip, en Debian el paquete también se llama flip, puede manejar finales de línea. Del manual:

When asked to convert a file to the same format that it already 
has, flip causes no change to the file. Thus to convert all 
files to **IX format you can type 

flip -u * 

and all files will end up right, regardless of whether they were 
in MS-DOS or in **IX format to begin with. This also works in the 
opposite direction. 

O usted podría utilizar GNU Recode:

< /etc/passwd recode ..pc | tee a b > /dev/null 
file a b 

Salida:

a: ASCII text, with CRLF line terminators 
b: ASCII text, with CRLF line terminators 

Convertir a UNIX el fin de línea:

recode pc.. a b 
file a b 

de salida:

a: ASCII text 
b: ASCII text 

recodificar abrevia DOS fin de línea como pc, por lo que la lógica con la pc.. es: convertir de formato de PC a la predeterminada, que es latin1 con el fin de línea de Unix.

3

en Ubuntu, utiliza la utilidad fromdos

fromdos test.txt 

el ejemplo anterior puede tomar un archivo de MS-DOS o Microsoft Windows u otro archivo con diferentes separadores de línea y formatear el archivo con los nuevos separadores de línea a leerse en Linux y Unix.

2

Una forma usando GNU coreutils:

< file.txt tr -d '\r' 
0

Una modificación de la respuesta ganadora si es necesario filtrar por archivo que termina

grep -URl ^M . | grep .php | xargs dos2unix 

Solía ​​dos2unix en lugar de fromdos pero el efecto debería ser el mismo.

Cuestiones relacionadas