La suppression de Windows retours à la ligne sur Linux (sed vs awk)

Ont certains des fichiers délimités par des avec mal placé caractères de saut de ligne dans le milieu de champs (pas de ligne se termine), apparaissant comme des ^M dans Vim. Ils proviennent de freebcp (sur Centos 6) exportations de base de données MSSQL. Dumping les données en hexadécimal montre \r\n motifs:

$ xxd test.txt | grep 0d0a
0000190: 3932 3139 322d 3239 3836 0d0a 0d0a 7c43

Je peux les enlever avec awk, mais je suis incapable de faire de même avec le sed.

Cela fonctionne dans awk, enlever les sauts de ligne complètement:

awk 'gsub(/\r/,""){printf $0;next}{print}'

Mais cela sed ne pas, en laissant la ligne de flux en place:

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

où cela semble avoir aucun effet:

sed -i 's/\r\n//g'

À l'aide de ^M dans l'expression sed (ctrl+v, ctrl+m) ne semble pas fonctionner.

Pour ce genre de tâches, sed est plus facile de grok, mais je suis en train de travailler sur l'apprentissage plus sur les deux. Suis-je à l'aide de sed mal, ou est-il une limite?

  • Avez-vous essayé avec le cite: sed -e s/"^M"//g ?
  • Fonctionne comme prévu pour moi, avec GNU sed 4.2.1...
  • dont le motif est travail pour vous? J'ai la même version de sed.
  • sed 's/\r//g', même avec POSIXLY_CORRECT=1. La deuxième, bien sûr, ne fait rien, parce que \n ne fait pas partie du modèle de l'espace.
  • Ne que sed supprimer le \r\n habitudes, ou de les remplacer par \n? Sur mon système de remplacement se produit, non pas une suppression.
InformationsquelleAutor kermatt | 2012-07-27