Tengo esta línea dentro de un archivo:

ULNET-PA,client_sgcib,broker_keplersecurities
,KEPLER

Intento de deshacerse de los que ^M (retorno de carro) carácter de lo que he usado:

sed 's/^M//g'

Sin embargo, esto no quita todo después de ^M:

[[email protected] tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities^M,KEPLER

[[email protected] tmp]# sed 's/^M//g' test
ULNET-PA,client_sgcib,broker_keplersecurities

Lo que quiero obtener es:

[[email protected] tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities,KEPLER
  • ¿Por qué no utilizar \n o \r\n en su expresión?
  • No ^ y M literalmente, es ^M, si mal no recuerdo, se llama un control character.
  • El uso de $ tr -d ‘\015’ <archivo1 >archivo2; mv archivo1 archivo2
  • Simplemente es, el uso de ‘dos2unix <nombre de archivo>’
InformationsquelleAutor SoSed | 2013-10-16

7 Comentarios

  1. 55

    Uso tr:

    tr -d '^M' < inputfile

    (Tenga en cuenta que el ^M personaje puede ser de entrada con Ctrl+VCtrl+M)


    EDIT: Como sugirió por Glenn Jackman, si usted está utilizando bash, también se podría decir:

    tr -d $'\r' < inputfile
    • +1 por la solución más sencilla. También tenga en cuenta que usted puede utilizar octal códigos en tr, como tr -d '\012' para eliminar los saltos de línea, por ejemplo. Y usted puede utilizar od -bc inputfile a examinar lo que los códigos de lo que significa y es donde en un archivo.
    • Véase también dos2unix
    • I gues dos2unix iba a quitar CR sólo desde el final de la línea. En el ejemplo de la pregunta no la hace evidente si está presente sólo en el extremo de la línea.
    • Supongo que tal vez no es universal, pero mi dos2unix tiene varias opciones diferentes para controlar el modo de conversión que puede ser apropiado (en particular aquellos para tratar con archivos de Mac, que parece que les gusta usar ^M finales de línea). No puede ser una solución perfecta para la OPs actual de la cuestión, pero es una buena cosa para saber acerca de, por lo tanto el «véase también…».
    • Si usted está usando bash, puede escribir tr -d $'\r'
    • Gracias, editado por la nota.
    • Gracias hombre! tr -d $’\r’ < inputfile funciona como un encanto!
    • Sí, dos2unix puede hacer esto en Mac, ver a mi answera continuación.
    • Se puede saber qué hace el signo de dólar «$» hacer allí? Hice algunas búsquedas, pero no era capaz de averiguar. Gracias!
    • que es bash ANSI-C citando

  2. 14

    sigue la misma línea:

    sed -i 's/^M//g' file

    cuando escriba el comando, para ^M escribe Ctrl+VCtrl+M

    realmente si ya se ha abierto el archivo en vim, usted puede simplemente en vim hacer:

    :%s/^M//g

    mismo, ^M que tipo de Ctrl-V Ctrl-M

    • Simplemente mantenga presionada la tecla Ctrl y, a continuación, pulse V M
    • El OP dijo que quería una solución con sed.
    • El uso de $ tr -d ‘\015’ <archivo1 >archivo2; mv archivo1 archivo2
    • Esto funcionó, por favor consulte este enlace para obtener más variaciones: cyberciti.biz/faq/…
  3. 7

    Usted puede simplemente utilizar dos2unix que está disponible en la mayoría de los sistemas Unix/Linux. Sin embargo me encontré con el siguiente comando sed para ser mejor, ya que se eliminan ^M donde dos2unix no podía:

    sed 's/\r//g' < input.txt >  output.txt

    Espero que ayude.

    Nota: ^M es en realidad carácter de retorno de carro que se representa en el código a medida \r
    Lo dos2unix hace más probable es equivalente a:

    sed 's/\r\n/\n/g' < input.txt >  output.txt

    No elimina \r cuando no es inmediatamente seguido por \n y reemplaza a la vez con solo \n. Esto no funciona con ciertos tipos de archivos, como uno de los acabo de probar con.

    • bonita explicación!! Thnks!!
    • De hecho, agradable explicación. Su enfoque no parece trabajar en cualquier caso he probado donde dos2unix fallado.
  4. 5
    alias dos2unix="sed -i -e 's/'\"$(printf '5')\"'//g' "

    Uso:

    dos2unix file
    • ¿cómo puede usted utilizar este comando en un script de shell, sin alias? seguí recibiendo sed que se quejan algunos de sintaxis….como solución de con \015 char vs ^M
    • He encontrado esto en alguna parte: sed 's,'$'\015'',,'
  5. 3

    Si Perl es una opción:

    perl -i -pe 's/\r\n$/\n/g' file

    -i hace un .bak versión del archivo de entrada

    \r = retorno de carro

    \n = salto de línea

    $ = final de la línea

    s/foo/bar/g = nivel mundial sustituto «foo» con «bar»

    • el amor perl, trabajó muy bien 🙂
    • ¿cómo puedo utilizar el mismo en el script de perl. test.pl
    • #!/usr/bin/perl abierto EN, «<«, turno; se abre «>», turno; mientras ( <A> ) { s/\r\n$/\n/g; imprimir; } close(EN); close (); LA
    • test.pl infile outfile
    • Tenga en cuenta que el test.pl la solución en los comentarios NO va a crear un archivo de copia de seguridad. En su lugar, tendrá que escribir en un archivo separado.
  6. 1

    Estoy de acuerdo con @twalberg (ver aceptado responder a los comentarios, arriba), dos2unix en Mac OSX cubre este, citando man dos2unix:

    Para que se ejecute en modo Mac utilice la opción de línea de comandos «-c mac» o el uso de la
    los comandos «mac2unix» o «unix2mac»

    Que se establecieron en ‘mac2unix’, que se deshizo de mi menos-cmd-visible ‘^M’ entradas, introducido por una Manzana de ‘Mensajes’ de transferencia de un script de bash entre 2 Yosemite (OSX 10.10) Mac!

    He instalado ‘dos2unix’, trivialmente, en Mac OSX usando la popular Casabrew instalador de paquetes, se los recomiendo y es compañero de comando, Barril.

  7. 1

    En awk:

    sub(/\r/,"")

    Si es en el final de registro, sub(/\r/,"",$NF) debería ser suficiente. No es necesario escanear el registro completo.

Dejar respuesta

Please enter your comment!
Please enter your name here