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.

user25321
la source
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
RaYell
la source
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.
Peter Mortensen
la source
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\)")
fitorec
la source
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.

Steven Penny
la source
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'

la source
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
Steven Penny
la source
0

Oui, utilisez dos2unix. Par exemple:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
la source
0

$ recode dos .. FICHIER
$ flip -u FICHIER

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


la source