Remplacer un caractere ^M en Vi

Résolu/Fermé
guin - 6 janv. 2005 à 15:18
leon91490 Messages postés 166 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 9 septembre 2017 - 21 août 2016 à 19:26
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
A voir également:

9 réponses

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
36
super pas utile quand vim n'est pas installé
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 avril 2005 à 18:03
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
12
Voici la réponse :

tapez la commande suivante :

:1$ s/\r//g


Merci pour votre disponibilité
8
sans oublier le ";"

:1;$ s/\r//g

;-)
0
plutôt le caractere "," ce qui donne:
:1,$ s/\r//g
0
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 ? )
2
Salut,

( les raisons sont peut-être qu'il aurait fallu un mac2unix ? )
Je ne le pense pas ;-)

lami20j@debian:~$ cat -v CR
ligne1^M
ligne2^M
lami20j@debian:~$ perl -pi -e 's/\r//' CR
lami20j@debian:~$ cat -v CR
ligne1
ligne2
lami20j@debian:~$ perl -pi -e 's/\n/\r\n/' CR
lami20j@debian:~$ cat -v CR
ligne1^M
ligne2^M
lami20j@debian:~$ sed -i 's/\r//' CR
lami20j@debian:~$ cat -v CR
ligne1
ligne2
0
Joseph Tux > lami20j
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://www.stephane-kus.fr/IMG/zip/IENSP-XvPP-3-1.zip )

merci
0
lami20j > Joseph Tux
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
0
Joseph Tux > lami20j
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 )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 nov. 2008 à 13:38
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
1
kelux Messages postés 3065 Date d'inscription vendredi 18 juin 2004 Statut Contributeur Dernière intervention 20 janvier 2023 432
6 janv. 2005 à 15:29
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 :Þ
0
Utilisateur anonyme
6 janv. 2005 à 15:53
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
0
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
0
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..
0
lami20j > Joseph Tux
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
$ 
0
Joseph Tux > lami20j
31 déc. 2009 à 12:27
OK, merci
0
%!tr '\015' '\;'
0
leon91490 Messages postés 166 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 9 septembre 2017 47
21 août 2016 à 19:26
et aussi pour éviter les problemes sur les echanges de fichiers via un montage windows ou vers windows on peut faire

mount //hostWindows/montage /media/reseau/ -o user,uid=moi,gid=moi,conv=auto,iocharset=utf8

bien pratique lorsque on envoie ou recoit des fichiers de config vers windows.
0