Posez votre question Signaler

Remplacer un caractere ^M en Vi [Résolu]

guin - Dernière réponse le 31 déc. 2009 à 12:27
J'ai plein de caractere ^M dans mon fichier Vi sous linux
avez un moyen pour s 'en debarasser

J'ai essayer :1;$ s/\^M//g ca ne marche pas !!


Merci pour votre aide
Lire la suite 

Remplacer un caractere ^M en Vi »

16 réponses
Réponse
+9
moins plus
Je répond à ce vieux post parce qu'il est bien placé dans google et que les réponses sont assez légères...

bref, il suffit de taper dans vim:
:set fileformat=unix

et le fichier est converti avec les fins de lignes de unix.
inversement:
:set fileformat=dos
permettra aux utilisateurs de windows de lire votre fichier de manière agréable. Cette commande fixe le format du fichier, il n'est donc pas nécessaire de le refaire à chaque ouverture.

La commande unix
file mon_fichier.txt
permet de connaître le type de mon_fichier.txt (où de n'importe quel fichier avec un contenu mime valide)

Et effectivement, avec le paquet tofrodos installé, vous avez les commandes:
fromdos mon_fichier.txt
todos mon_fichier.txt
dont le nom est assez explicite.

Dans la même catégorie dans vim:
:set fileencoding=utf-8
converti le fichier iso-machin ou latinX en utf8

inversement:
:set fileencoding=iso-8859-15
converti le fichier pour être lisible sous win98 ou pour votre site web obsolète ]:->

En ligne de commande, "iconv" fera des merveilles. Pour plus de précision:
man iconv
Ajouter un commentaire
Réponse
+3
moins plus
Voici la réponse :

tapez la commande suivante :

:1$ s/\r//g


Merci pour votre disponibilité
OdEa - 4 avril 2005 à 11:59
sans oublier le ";"

:1;$ s/\r//g

;-)
Ajouter un commentaire
Réponse
+3
moins plus
Bounjour guin,

Pour compléter la réponse, dans "vi", tu peux taper des caractères non imprimable du type "^M" (qui signifie "Ctrl-M" cette combinaison donnant le code ASCII équivalent à la la touche "entrée") en tapant "Ctrl-v" suivi de ta touche non imprimable.

Donc en tapant Ctrl-v puis Ctrl-M, tu obtiens un "^M" compris par vi comme étant le caractère non imprimable Ctrl-M.


Dal
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Le fichier en question était il stocké sous windows auparavant ?

J'avais un probleme un peu similaire (des retours à la ligne avec un \M ou L, je ne me souviens plus de la lettre), un script que j'avais stocké sous windows et lu avec vi sous linux.

J'ai utilisé le programme 'dos2unix'

Ensuite le script etait comme neuf :)



Luc L.
[Gentoo] enfin :Þ
Ajouter un commentaire
Réponse
+0
moins plus
voui, je souscriche, encore que chez moi le machçin s'appelle fromdos

fromdos < tonfichierdégueulasse > tonfichiertouprop

mais juste une remarque par rapport à ton remplacement dans vi: les caractères de contrôle, tu ne les tapes pas avec un chapeau (même échappé) puis le caractère. pour avoir ton "chapeau-M" tu tapes Ctrl-V Ctrl-M

tous les caractères de contrôle se tapent comme ça, Ctrl-V suivi de ton caractère de controle

ce qui donne (mais je suis pas sûr que ça va apparaitre... ah ben non ça n'apparaît pas)



un tien dans les champs
tu l'auras méchant
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

La commande unix
file mon_fichier.txt
permet de connaître le type de mon_fichier.txt


En complément, la commande cat permet de voir les caractères non imprimables
cat -A fichier.txt
--
106485010510997108
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Pour des raisons inexplicables dos2unix (ou fromdos) est inefficace sur ce fichier bourré de ^M ,et ne faisant qu'une seule énorme ligne !

Pour remplacer les ^M par un vrai retour à la ligne, on peut faire:

:% s/^M/\r/g ( ^M s'obtenant comme il est dit ci dessus: Ctrl V + Ctrl M )

mais
:% s/\r/\r/g marche aussi bien !!! ( vim 7 sous Linux Debian etch )

( les raisons sont peut-être qu'il aurait fallu un mac2unix ? )
Joseph Tux - 23 déc. 2009 à 14:13
Bonjour
Très intéressant, mais mon fichier se présentait avec 1 seule très longue ligne , bourrée ^M


( il s'agit du fichier sommaire.html du squelette SPIP: IENSP-XvPP qui se trouve ici: http://skus1.free.fr/IMG/zip/IENSP-XvPP-3-1.zip )

merci
lami20j - 23 déc. 2009 à 15:35
Salut,

mais mon fichier se présentait avec 1 seule très longue ligne , bourrée ^M

Ben, il fallait le dire (.orig c'est pour sauvegarder l'original)
perl -pi.orig -e 's/\r//g' fichier
Joseph Tux - 25 déc. 2009 à 18:32
Merci lami20, mais avec cette solution, si on ellimine bien les nombreux ^M, on ne les remplace pas pour autant par des retours à la ligne comme on les voudrait ! Ils sont justes supprimés.

perl -pi.orig -e 's/^M/\r/g' sommaire.html

perl -pi.orig -e 's/\r/\r/g' sommaire.html

sont sans aucun effets ( contrairement à la substitution sous vim qui m' a rendu loyalement ce service )
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

on ne les remplace pas pour autant par des retours à la ligne comme on les voudrait
C'est normal puisque c'est ça que j'ai exécuté et j'ai du mal comprendre que c'est ça que tu veux en fait ;-)

Sinon
lami20j@debian:~$ cat -v fic_
ligne1^Mligne2^Mligne3^Mligne4^M
lami20j@debian:~$ perl -pi.orig -e 's/\r/\n/g' fic_
lami20j@debian:~$ cat -v fic_
ligne1
ligne2
ligne3
ligne4

lami20j@debian:~$ cat -v fic_.orig
ligne1^Mligne2^Mligne3^Mligne4^M

Et si tu veux garder le format dos
lami20j@debian:~$ cat -v fic_
ligne1^Mligne2^Mligne3^Mligne4^M
lami20j@debian:~$ perl -pi.orig -e 's/\r/\r\n/g' fic_
lami20j@debian:~$ cat -v fic_
ligne1^M
ligne2^M
ligne3^M
ligne4^M

lami20j@debian:~$ cat -v fic_.orig
ligne1^Mligne2^Mligne3^Mligne4^M
Joseph Tux - 29 déc. 2009 à 19:52
Cela me semble simple à décrire:

Mon fichier ne fait qu'une seule ligne, bourrée de ^M
Je veux que chaque ^M affiché devienne une vraie nouvelle ligne

Parmi toutes ces méthodes, seule celle que j'ai indiquée a pu fonctionner sur ce fichier.

Je suis sous Debian Etch, Gnome, et quel que soit le mode codage du Terminal GNOME ( v 2.14.2 ), aucun (iso-1 iso-15 ou UTF-8 ) ne résout ce problème ( habituellement sous UTF-8 et en Français )

es-tu aller voir/tester le fichier en question ?

sa description par file est la suivante:

file sommaire.html: Non-ISO extended-ASCII HTML document text, with CR line terminators

je pense que le "non-iso" doit bien parler de ça..
lami20j - 29 déc. 2009 à 20:07
Salut,

es-tu aller voir/tester le fichier en question ?
Bien sur que oui ;-(
J'ai testé la commande de remplacement que j'ai écrit sur tes fichiers (ce que tu m'as donnée au message 10) et ça fonctionne.
Je ne sais pas pourquoi tu n'as par réussi.

Pour te faire plaisir je viens de tester encore une fois.
Voilà ce que j'ai
$ file sommaire.html 
sommaire.html: Non-ISO extended-ASCII HTML document text, with CR line terminators
$ perl -pi.orig -e 's/\r/\n/g' sommaire.html 
$ file sommaire.html
sommaire.html: Non-ISO extended-ASCII HTML document text
$ file sommaire.html.orig 
sommaire.html.orig: Non-ISO extended-ASCII HTML document text, with CR line terminators
$ mv sommaire.html.orig sommaire.html 
$ file sommaire.html      
sommaire.html: Non-ISO extended-ASCII HTML document text, with CR line terminators
$ perl -pi.orig -e 's/\r/\r\n/g' sommaire.html 
$ file sommaire.html
sommaire.html: Non-ISO extended-ASCII HTML document text, with CRLF line terminators
$ file sommaire.html.orig 
sommaire.html.orig: Non-ISO extended-ASCII HTML document text, with CR line terminators
$ 
Joseph Tux - 31 déc. 2009 à 12:27
OK, merci
Ajouter un commentaire
Ce document intitulé « remplacer un caractere ^M en Vi » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook