89 votes

Comment remplacer la terminaison de ligne de Windows par la version Unix ?

Nous avons 10 PC avec une version d'Ubuntu et seulement un accès à distance. En faisant quelques mises à jour de logiciels personnalisés, je n'ai pas remarqué que les fins de ligne dans certains scripts étaient la version Windows (CR+LF) et non la version Unix (LF). Donc maintenant quand je veux lancer le scripts il donne une erreur :

bash: /usr/local/bin/portsee: /usr/bin/python^M: bad interpreter: No such file or directory

Existe-t-il un moyen de changer toutes les fins de lignes dans un script depuis le terminal. Le problème est que je ne peux installer aucun nouveau logiciel sur ce groupe de PC.

159voto

heemayl Points 85741

Option 1 : dos2unix

Vous pouvez utiliser le programme dos2unix qui est spécialement conçu à cet effet :

dos2unix file.txt

remplacera tous les CR de toutes les lignes, en opération sur place.

Pour enregistrer la sortie dans un fichier différent :

dos2unix -n file.txt output.txt

Vous devrez peut-être l'installer d'abord par :

sudo apt-get install dos2unix

Option 2 : sed

Ou vous pouvez utiliser sed pour remplacer tous les CR ( \r ) des fins de ligne :

sed -i.bak 's/\r$//' file.txt

Avec option -i le fichier sera édité sur place, et le fichier original sera sauvegardé en tant qu'élément de la base de données. file.txt.bak .

2voto

MusashiAharon Points 123

El sed n'est pas portable sur toutes les plateformes. Elle n'a pas fonctionné pour moi sur macOS à moins que je fasse brew install gsed et utilisé gsed 's/\r$//' .

Pour une solution qui fonctionne dans la plupart des endroits sans rien installer, j'utilise

tr -d '\r'

Pour modifier un fichier sur place, je produis les nouvelles données dans un sous-shell avant d'effacer et d'écraser le fichier original :

echo "$(tr -d '\r' < file)" > file

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X