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
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
A voir également:
- ^M vi
- Gta vi prix - Accueil - Jeu vidéo
- Waptrick vi - Télécharger - Divers TV & Vidéo
- Team vi - Télécharger - Connexion à distance
- Vi rechercher - Forum Linux / Unix
- Street vi - Télécharger - Transports & Cartes
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
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
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
4 avril 2005 à 18:03
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
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
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 ? )
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 ? )
Salut,
( les raisons sont peut-être qu'il aurait fallu un mac2unix ? )
Je ne le pense pas ;-)
( 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
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
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
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 )
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 )
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 569
17 nov. 2008 à 13:38
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
106485010510997108
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
kelux
Messages postés
3074
Date d'inscription
vendredi 18 juin 2004
Statut
Contributeur
Dernière intervention
20 janvier 2023
432
6 janv. 2005 à 15:29
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 :Þ
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 :Þ
Utilisateur anonyme
6 janv. 2005 à 15:53
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
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
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
Et si tu veux garder le format dos
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
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..
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..
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
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 $
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
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.
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.
23 janv. 2015 à 15:08