Bonjour à Tous
En shell je souhaite convertir des fichiers Dos en Unix.
Avant tout je vérifie si le fichier est au format Unix
S'il est au format unix je ne fais rien, sinon je le convertie en Unix.
Qui a une solution à me proposer ?
Merci d'avance
Version imprimable
Bonjour à Tous
En shell je souhaite convertir des fichiers Dos en Unix.
Avant tout je vérifie si le fichier est au format Unix
S'il est au format unix je ne fais rien, sinon je le convertie en Unix.
Qui a une solution à me proposer ?
Merci d'avance
Bonjour.
Il existe le programme en ligne de commande dos2unix qui fait ça très simplement. A voir s'il existe pour ton OS et l'installer si besoin.
Si en plus tu doit tester le contenu du fichier avant de lancer cette commande, je pense que tu sera perdant en perf ;) (sinon à coup de grep ça devrait être faisable).
Cordialement,
Idriss
ou avec sed
le ^M est obtenu en tapant CTRL+V puis ENTERCode:sed 's/^M//g' fichier > fichierresultat
A choisir entre le sed et le dos2unix, il vaut mieux prendre le dos2unix, car selon le besoin, la suppression du ^M ne suffit pas, on peut ausi avoir besoin de convertir la locale du fichier.
De plus, pour être propre en sed, même si le cas est très très rare, il ne faudrait supprimer que le ^M en fin de ligne :aie:
Merci à tous
J'ai testé avec le code ci-dessous
Mais j'ai toutes les lignes du FichierA qui s'affichent directement sur la console.Code:
1
2 dos2unix $FichierA > $FichierB
En plus de ça le script reste bloquée avec cette commande.
Je voudrais savoir s'il faut exécuter cette commande avec des options particulières.
PS: J'ai exactement le même problème avec la commande sed
Merci d'avance
Je ne vois qu'une possibilité, ta variable $FichierA n'existe pas.
Cette variable est bien créée.
En gros tous les fichiers que je vais traiter sont au format Dos/ windows
Alors que mon script ne traite que le fichier au format UNIX
Je cherche une autre solution pour contourner ce problème.
Je ne sais pas, chez moi cela fonctionne et cela ne bloque pas:
Code:
1
2$ file fich.txt fich.txt: ASCII text, with CRLF line terminators
Code:
1
2
3
4 $ cat -A fich.txt titi^M$ toto^M$ tata^M$
Code:
1
2$ dos2unix fich.txt dos2unix: converting file fich.txt to UNIX format ...
Code:
1
2$ file fich.txt fich.txt: ASCII text
Code:
1
2
3
4 $ cat -A fich.txt titi$ toto$ tata$
Code:
1
2$ unix2dos fich.txt unix2dos: converting file fich.txt to DOS format ...
Code:
1
2$ file fich.txt fich.txt: ASCII text, with CRLF line terminators
Code:
1
2
3
4 $ cat -A fich.txt titi^M$ toto^M$ tata^M$
Code:$ sed -i 's/^M$//g' fich.txt
Code:
1
2$ file fich.txt fich.txt: ASCII text
Code:
1
2
3
4 $ cat -A fich.txt titi$ toto$ tata$
Voilà un peu ce que j'ai fait:
Comme résultat j'ai le contenu du fichier A qui s’affiche sur la console et mon script se comporte de la même façon avec la commande dos2unixCode:
1
2
3
4
5
6 FichierA= ${RepertoireA} FichierB= ${RepertoireA} sed -ie 's/[ctrl+v][ctrl+m]//' $FichierA sed -ie 's/[ctrl+v][ctrl+m]//' $FichierB
Finalement ça marche mais qu'avec des fichiers de petites tailles. Il fallait rediriger la sortie de la commande dos2unix pour éviter l'affichage sur la console
Code:
1
2
3
4 dos2unix $FichierA>/dev/null 2>&1 dos2unix $FichierB >/dev/null 2>&1
Finalement ça marche avec ce code:
Code:
1
2 cat fichier | sed -e "1d" > fichier2
Bonjour.
Ton sed ne fait que supprimer la première ligne ;)
Et le cat est superflus : sed <...> fichier.
Idriss