« Trucs:Supprimer les ^M dans les fichiers ASCII » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(4 versions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
= Supprimer les ^M dans les fichiers ASCII =
<div class="leapar">contributeurs léa<></div>
<div class="leapar">contributeurs léa<></div>


Les caractères ^M que l'on peut rencontrer parfois dans les fichiers texte sous Unix proviennent du codage de la fin de ligne, qui diffère selon que le fichier a été édité sur un système Microsoft (CR LF, ou ^M et ^L) ou sur un Unix (LF seul). Les éditeurs de texte qui ne supportent pas le codage à la Microsoft affichent donc ce ^M superflu... Voyons ci-dessous des méthodes pour s'en débarrasser.
Les caractères ^M que l'on peut rencontrer parfois dans les fichiers texte sous Unix proviennent du codage de la fin de ligne, qui diffère selon que le fichier a été édité sur un système Microsoft (CR LF, ou ^M et ^L) ou sur un Unix (LF seul). Les éditeurs de texte qui ne supportent pas le codage à la Microsoft affichent donc ce ^M superflu... Voyons ci-dessous des méthodes pour s'en débarrasser.


==== Méthode 1 ====
==== Méthode shell ====


Par fp (crontab_at_caramail_point_com)
Par fp (crontab_at_caramail_point_com)
Ligne 13 : Ligne 14 :
'''Remarque''' (R. LEROY): Pour Debian si vous voulez faire encore plus rapide :<br /><code>apt-get install sysutils</code><br /> puis <code>dos2unix fichier.txt</code>
'''Remarque''' (R. LEROY): Pour Debian si vous voulez faire encore plus rapide :<br /><code>apt-get install sysutils</code><br /> puis <code>dos2unix fichier.txt</code>


==== Méthode 2 ====
==== Méthode avec ''vi'' ====


Par Jonesy(jonesy_at_wanadoo_point_fr)
Par Jonesy(jonesy_at_wanadoo_point_fr)
Ligne 34 : Ligne 35 :
<div class="note">NDM: voir aussi la fin de l'[../software/vi.php3 article sur vi].</div>
<div class="note">NDM: voir aussi la fin de l'[../software/vi.php3 article sur vi].</div>


==== Méthode 3 ====
==== Autre méthode avec ''vim'' ====
 
Par Rémi Collet
 
C’est prévu dans vim, en utilisant <code>set fileformat</code>.
 
Suppression des ^M
 
<div class="code"><nowiki>:set fileformat=unix</nowiki></div>
 
Ajout des ^M
 
<div class="code"><nowiki>:set fileformat=dos</nowiki></div>
 
Remarque : il y a même le format Mac.
 
==== Encore une méthode avec ''vim'' ====
 
Si d'aventure vous vous retrouvez avec un fichier sur une seule ligne, et qu'au vu des commentaire précédents vous obtenez un fichier vidé de ses <span style="color:#0000FF;">^M</span> mais toujours sur une ligne, reprenez le fichier brut (pas celui dans lequel on ne distingue plus les fins de lignes; autrement dit le fichier sur lequel vous n'avez appliqué aucune des précédentes méthodes) :  <br>
<br>
$ vim lefichierenquestion
 
une fois sous vim :
 
:%s/{ctrl-v}{ctrl-m}/{ctrl-v}{entrée}/g
 
et voilà!
 
==== Méthode avec ''dos2unix'' ====


Par Zeck (zeck_at_netliberte_point_org)
Par Zeck (zeck_at_netliberte_point_org)
Ligne 48 : Ligne 77 :
<div class="code"><nowiki>#!/bin/bash</nowiki><br /> cat $1 | tr -d '\r' >$2</div>
<div class="code"><nowiki>#!/bin/bash</nowiki><br /> cat $1 | tr -d '\r' >$2</div>


==== Méthode 4 ====
==== Méthode avec Perl ====


Par Arnaud ASSAD (arhuman_at_hotmail_point_com
Par Arnaud ASSAD (arhuman_at_hotmail_point_com
Ligne 58 : Ligne 87 :
<code>perl -pi -e 's/\r//g' *.c</code>
<code>perl -pi -e 's/\r//g' *.c</code>


==== Méthode 5 ====
==== Méthode avec ''tr'' ====


Par Marcopol (mlebas_at_labeille_point_net)
Par Marcopol (mlebas_at_labeille_point_net)
Ligne 68 : Ligne 97 :
Cette solution est une des plus simples, et moins lourde que d'utiliser perl, awk ou d'écrire un script.
Cette solution est une des plus simples, et moins lourde que d'utiliser perl, awk ou d'écrire un script.


==== Méthode 6 ====
====Méthode avec des encodeurs de formats de fichiers texte====
 
Par Rémi Collet
 
C'est prévu dans vim, en utilisant set fileformat.
 
Ex : Supression des ^M
 
<div class="code"><nowiki>:set fileformat=unix</nowiki></div>
 
Ex : Ajout des ^M


<div class="code"><nowiki>:set fileformat=dos</nowiki></div>
Par nicola


Remarque : il y a même le format Mac.
On peut utiliser ''recode'' ou ''konwert'', le deuxième s’utilise ainsi :
[[Catégorie:Trucs_Administration]]
 
==== Méthode 7 : Pour ceux qui n'on vraiment pas de bol ;) ====
 
Si d'aventure vous vous retrouvez avec un fichier sur une seule ligne, et qu'au vu des commentaire précédents vous obtenez un fichier vidé de ses <span style="color:#0000FF;">^M</span> mais toujours sur une ligne, reprenez le fichier brut (pas celui dans lequel on ne distingue plus les fins de lignes; autrement dit le fichier sur lequel vous n'avez appliqué aucune des précédentes méthodes) : <br>
<br>
$ vim lefichierenquestion


une fois sous vim :
* Vers Unix et Amiga : <code>konwert lf lefichier</code>
* Vers Mac : <code>konwert cr lefichier</code>
* Vers Windows et DOS : <code>konwert crlf lefichier</code>


:%s/{ctrl-v}{ctrl-m}/{ctrl-v}{entrée}/g
Il trouve tout seul l’encodage en entrée.


et voilà!
[[Catégorie:Trucs Administration systeme]]

Dernière version du 24 mars 2016 à 16:18

Supprimer les ^M dans les fichiers ASCII

contributeurs léa<>

Les caractères ^M que l'on peut rencontrer parfois dans les fichiers texte sous Unix proviennent du codage de la fin de ligne, qui diffère selon que le fichier a été édité sur un système Microsoft (CR LF, ou ^M et ^L) ou sur un Unix (LF seul). Les éditeurs de texte qui ne supportent pas le codage à la Microsoft affichent donc ce ^M superflu... Voyons ci-dessous des méthodes pour s'en débarrasser.

Méthode shell

Par fp (crontab_at_caramail_point_com)

Voilà enfin un modèle de fichier dos2unix pour ceux qui en cherchaient, Celui - ci est en ksh mais il est sûrement assez simple à adapter au bash...

#!/bin/ksh
#*********************************************************************
# fichier : dos2unix
# description : Conversion fichier DOS en fichier UNIX
# (suppression des ctrl M)
# parametres :
#*********************************************************************
# saisie nom de fichier a convertir
if [ $# -lt 1 ]
then
read F?"Fichier(s) a convertir :"
else
F=$*
fi

# traitement fichiers
for fic in $F
do
if [ ! -f $fic ]
then
echo $fic n\'est pas un fichier valide
continue
else
typ=`file $fic|grep -i -E "text|shell"`
if [ "${typ}a" = "a" ]
then
echo Fichier $fic Non ASCII
else
tr -d "\015\023" <$fic >${fic}.$$
# aclget $fic | aclput ${fic}.$$
mv ${fic}.$$ $fic
echo $fic converti
fi
fi
done

Remarque (R. LEROY): Pour Debian si vous voulez faire encore plus rapide :
apt-get install sysutils
puis dos2unix fichier.txt

Méthode avec vi

Par Jonesy(jonesy_at_wanadoo_point_fr)

Suite au Trucs & Astuces de FP, que je vous invite à consulter, je vous propose une autre méthode afin de supprimer ces sales bêtes.

Avant tout, sachez que le ^M que vous voyez dans votre fichier texte est la manifestation du retour à la ligne des fichiers sur un système Microsoft Windows.
Sur les Unix-like (Linux, *BSD, Mac OS X, ...) le retour à la ligne est le code ascii 10 (<Ctrl-Alt-10> ou 0A en hexadécimal), alors que sous un système de Microsoft, le retour à la ligne est l'ensemble des deux codes ascii dans l'ordre : 13 et 10 (<Ctrl-Alt-13> et <Ctrl-Alt-10> ou 0D et 0A en hexadécimal).

Donc pour supprimer ces fameux ^M, faites comme suit :

Ouvrez votre fichier avec vi (ou vim, gvim, ...).
Une fois le fichier ouvert, tapez :
:%s/<Ctrl-v><entrée>//g

Pour rendre cette manipulation plutot ingrate automatique, faites en une macro !
Editer votre fichier ~/.vimrc et ajoutez y la ligne suivante :
map v :%s/<Ctrl-v><Ctrl-v><Ctrl-v><Ctrl-v><Ctrl-v><entrée>//g
Ensuite, lorsque vous ouvrirez un fichier avec des ^M, il vous suffira de taper v et <entrée>.

Cette solution a l'avantage de marcher sur tous les systèmes Unix-like, car vi (ou un clone) est présent sur tous les systèmes Unix-like.

D'autres solutions possibles :

  • Ouvrir le fichier avec un éditeur hexadécimal, comme ghex, et supprimer tous les 0D.
  • Lors du tranfert du fichier sur votre système Unix-like, préférez le protocole FTP en mode ascii, si possible.
NDM: voir aussi la fin de l'[../software/vi.php3 article sur vi].

Autre méthode avec vim

Par Rémi Collet

C’est prévu dans vim, en utilisant set fileformat.

Suppression des ^M

:set fileformat=unix

Ajout des ^M

:set fileformat=dos

Remarque : il y a même le format Mac.

Encore une méthode avec vim

Si d'aventure vous vous retrouvez avec un fichier sur une seule ligne, et qu'au vu des commentaire précédents vous obtenez un fichier vidé de ses ^M mais toujours sur une ligne, reprenez le fichier brut (pas celui dans lequel on ne distingue plus les fins de lignes; autrement dit le fichier sur lequel vous n'avez appliqué aucune des précédentes méthodes) :

$ vim lefichierenquestion

une fois sous vim :

:%s/{ctrl-v}{ctrl-m}/{ctrl-v}{entrée}/g

et voilà!

Méthode avec dos2unix

Par Zeck (zeck_at_netliberte_point_org)

Syntaxe : dos2unix srcfile destfile

dos2unix est le script suivant :

#!/bin/bash
awk '{ sub("\r$", ""); print }' $1 > $2

Variante, par Manisero (manisero chez freesurf point fr) :

#!/bin/bash
cat $1 | tr -d '\r' >$2

Méthode avec Perl

Par Arnaud ASSAD (arhuman_at_hotmail_point_com

perl -pi -e 's/\r//g' fichieramodifier.extension

Accepte les widlcards :

perl -pi -e 's/\r//g' *.c

Méthode avec tr

Par Marcopol (mlebas_at_labeille_point_net)

Voilà un sujet qui inspire beaucoup ici, voici une solution plus conventionelle :

$ cat mon_fichier.txt | tr -d '\r' > mon_nouveau_fichier.txt

Cette solution est une des plus simples, et moins lourde que d'utiliser perl, awk ou d'écrire un script.

Méthode avec des encodeurs de formats de fichiers texte

Par nicola

On peut utiliser recode ou konwert, le deuxième s’utilise ainsi :

  • Vers Unix et Amiga : konwert lf lefichier
  • Vers Mac : konwert cr lefichier
  • Vers Windows et DOS : konwert crlf lefichier

Il trouve tout seul l’encodage en entrée.