|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre chevronné
![]() ![]() |
Bonjour,
C'est une proposition d'ajout à la FAQ: Citation:
EDIT: Note2: Il existe aussi le paquet dos2unix sur les principales distributions, mais ça impose d'ajouter un paquet supplémentaire, pas forcément utile sur une machine vouée à la production par exemple. |
|
|
|
20
|
|
|
#2 |
![]() ![]() Inscription : décembre 2004 Messages : 1 668 ![]() |
Sinon, il existe l'outil dos2unix, contenu dans le package tofrodos sous Debian et Debian-Like.
Prenons le fichier foo.txt avec les fameux ^M en fin de ligne. Pour le convertir au format linux : |
|
|
20
|
|
|
#3 |
|
Membre chevronné
![]() ![]() |
Merci.
Oui mais tout le monde n'a pas Debian/Ubuntu. Mais je peux effectivement l'ajouter en commentaire. |
|
|
01
|
|
|
#4 |
![]() ![]() Inscription : février 2008 Messages : 2 756 ![]() |
Bonjour,
sed -ie signifie qu'une sauvegarde nommée fichiere sera créée ! |
|
|
20
|
|
|
#5 |
|
Membre chevronné
![]() ![]() |
merci, tipo corrigée
|
|
|
10
|
|
|
#6 |
![]() ![]() Inscription : décembre 2004 Messages : 1 668 ![]() |
- Avec awk :
Code :
awk '{ sub("\r$", ""); print }' $1 > $2 - Avec perl : |
|
|
20
|
|
|
#7 |
|
Membre chevronné
![]() ![]() |
oui, effectivement, les solutions sont très nombreuses.
pas vérifié mais ça devrait aussi le faire : Code :
awk -F= '{gsub("\r$","",$1)}1' OFS="=" mon_fichier Donc je pense me restreindre à une seule solution qui fonctionne, sinon il faut écrire un tuto. Et même remarque, awk est rarement dispo en busybox alors que sed, si. |
|
|
10
|
|
|
#8 |
|
Membre Expert
![]() |
pour des raisons de compatibilité, je trouve que la solution
est la plus pratique non ? edit: de même, le cat -Ev peut être avantageusement remplacé par cat -e plus universel |
|
|
10
|
|
|
#9 | |
|
Membre chevronné
![]() ![]() |
Citation:
Oui je suis d'accord, plus pratique et plus élégant aussi. Et donc, tu l'intègres comment ta redirection dans un find ? cat: le man dit que les 2 sont strictement équivalents et ne parle pas d'obsolescence de l'un par rapport à l'autre. Donc je préfère la solution "lisible". Un coup de man, et le lecteur comprend tout de suite à quoi servent les options. Mais là, c'est du chipotage :-) |
|
|
|
10
|
|
|
#10 | |
|
Membre Expert
![]() |
Citation:
Avec find, le sed est naturellement plus adapté (Mais est-ce que le g est bien nécessaire ?! Tu n'auras jamais qu'un seul \r$ par ligne normalement non ?). Pour ce qui est des histoires d'options, le problème, c'est que beaucoup de gens passent ici mais travaillent sur des machines sous Unix où un bon paquet de paramètres n'existent pas (comme -E pour cat, -i pour sed,...), c'est pour ça que je fais la remarque. Et je pense que l'option -e est plus utile que -E mais bon... |
|
|
|
10
|
|
|
#11 |
|
Membre chevronné
![]() ![]() |
Merci
Effectivement l'option "g" ne sert à rien ici. Pour le cat, il suffit de mettre les deux versions, j'édite comme ça. |
|
|
10
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 454 ![]() |
Salut,
Pour la portabilité il serait peut être bon d'ajouter : Le ^M s'obtenant par la séquence de touches "CTRL-V" + "CTRL-M". De même sous GNU-sed la notation ASCII est aussi possible :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
30
|
|
|
#13 |
|
Membre chevronné
![]() ![]() |
merci- ajouté le code ASCII.
|
|
|
10
|
|
|
#14 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 13 573 ![]() |
__________________
|
|
|
10
|
|
|
#15 |
|
Membre chevronné
![]() ![]() |
Ok, quand je pourrai éditer, j'ajouterai aussi cette possibilité.
|
|
|
00
|
|
|
#16 |
|
Membre chevronné
![]() ![]() |
Bon voila, merci pour les commentaires que j'ai récapitulés pour la proposition d'ajout à la FAQ:
----------------------------------------------------------------------- Windows et Unix ont des caractères de fin de ligne différents. En cas d'import de fichiers texte (y compris des scripts bash par exemple), il faut les convertir au format Unix sans quoi l'interpréteur (/bin/sh ou /bin/bash par exemple) ne pourra pas les exécuter ou risque de mener à des résultats étranges et venus d'ailleurs - je plaisante -, en tous cas, des erreurs difficiles à tracer : Le fichier au format Windows non converti au format Unix fera apparaitre des caractères ^M si vous l'ouvrez dans un éditeur (vi, vim, nano, gedit, ..). Remarque: Ce caractère "^M" s'obtient par la combinaison de touches "CTRL-V" + "CTRL-M". Le code ASCII du caractère "^M" est \x0D$. Voici un panel de solutions possibles : # commande GNU-sed (SOLUTION PORTABLE) Code :
find /home -type f -name "*.ext" -exec sed -i -e 's/^M$//' {} \; Code :
find /home -type f -name "*.ext" -exec sed -i -e "s/\x0D$//g" {} \; Code :
find /home -type f -name "*.ext" -exec sed -i -e "s/\r$//g" {} \; Code :
find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do dos2unix $path $path"_new"; done Code :
find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do awk '{ sub("\r$", ""); print }' $path > $path"_new"; done Code :
find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do cat $path | tr -d '\r' > $path"_new"; done Code :
find /home -type f -name "*.ext" -exec perl -pi -e 's/\r//g' {} \; |
|
|
30
|
Copyright © 2000-2013 - www.developpez.com