Existe-t-il une commande Bash pour convertir \ r \ n en \ n?


19

Existe-t-il une commande Bash pour convertir \ r \ n en \ n?

Lorsque je télécharge mes scripts de Windows vers Linux, j'ai besoin d'un utilitaire comme celui-ci pour faire fonctionner les choses.


7
dos2unixest généralement disponible, sinonsed -e 's/\r$//'
falstro

1
Non, il n'y a pas de commande Bash pour cela, mais il y a dos2unixun programme Unix / Linux pour faire ce que vous voulez.
pause jusqu'à nouvel ordre.

1
Pourquoi n'utilisez-vous pas simplement un éditeur de texte sain qui vous permet de choisir un style de nouvelle ligne lors de l'enregistrement de fichiers?
vtest

Réponses:


28

Il y a:

dos2unix

C'est la réponse historiquement correcte, bien que dos2unix ne soit pas toujours disponible de nos jours.
Jared

5

Translate ( tr ) est disponible dans tous les Unix:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.

1
A également pour effet secondaire de supprimer les autres \r. Ils sont très rares cependant.
ivan_pozdeev

5

Avec sed et trouvez cette fin avec .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")

5

Il existe un utilitaire Unix appelé convqui peut convertir les fins de ligne. Il est souvent invoqué avec des liens logiciels vers u2dou d2uou unix2dosou dos2unix.

De plus, il existe des utilitaires appelés fromdoset todos.


2

Utilisation de man 1 ed (qui édite les fichiers sur place sans aucune sauvegarde préalable - contrairement à: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

Je ne connaissais même pas ed, mais ça fait le boulot (vieux mais doré)
dwana

Cette commande a fonctionné pour moi lorsque les commandes d'autres réponses n'existaient pas sur l'hébergement partagé que j'utilise. Merci :)
FKasa

2

Faire cela avec POSIX est délicat:

  • POSIX Sed ne prend pas en charge \rou \15. Même si c'est le cas, l'option en place -in'est pas POSIX

  • POSIX Awk ne prend pas en charge \ret \15, cependant, l' -i inplaceoption n'est pas POSIX

  • d2u et dos2unix ne sont pas des utilitaires POSIX , mais ex est

  • Ex Posix ne supporte pas \r, \15, \nou\12

Pour supprimer les retours chariot:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Pour ajouter des retours chariot:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file


0

$ recode dos .. FICHIER
$ flip -u FICHIER

(Chacun existe également pour les systèmes non Ubuntu, mais ces liens sont pratiques.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.