Qu'est-ce que "^ M" et comment puis-je m'en débarrasser?


134

Lorsque j'ouvre le fichier vim, je vois des ^Mcaractères étranges .

Malheureusement, le moteur de recherche préféré au monde ne fonctionne pas bien avec les caractères spéciaux dans les requêtes, je vous pose donc la question suivante:

  • Quel est ce ^Mpersonnage?

  • Comment aurait-il pu arriver là?

  • Comment puis-je m'en débarrasser?


3
Vlastimil qui était une édition inutile. Got est le temps passé de get en anglais britannique.
Jesse_b

1
Il est un caractère de contrôle digraph, pour plus d' informations: help digraph-table.
Eric Leschinski

Réponses:


108

Le ^Mest un caractère de retour de chariot. Si vous voyez cela, vous voyez probablement un fichier provenant du monde DOS / Windows, où une fin de ligne est marquée par une paire retour chariot / nouvelle ligne, alors que dans le monde Unix, fin de ligne est marqué par une nouvelle ligne.

Lisez cet article pour plus de détails, ainsi que l'entrée Wikipedia pour newline .

Cet article explique comment configurer vim pour éditer de manière transparente des fichiers avec différents marqueurs de fin de ligne.

Si vous avez un fichier avec ^Mà la fin de certaines lignes et que vous voulez vous en débarrasser, utilisez ceci dans Vim:

:s/^M$//

(Appuyez sur Ctrl+ V Ctrl+ Mpour l'insérer ^M.)


11
Essayez :%s/^M/\r/gplutôt de supprimer ^Met de remplacer ^Mpar un caractère de nouvelle ligne \r. Sans cela %, la commande s'applique uniquement à la ligne en cours. Et je suis tombé sur des exemples où il ^Mn’est pas au bout de la ligne, tels queThe first line.^MThe second line.
George

Ou si vous ne voulez pas que des tas de sauts de ligne vous fassiez:%s/^M/
attention maintenant1

2
S'il ne s'agit que d'un retour chariot, il peut s'agir du saut de ligne classique (avant Unix) pour Macintosh. Même certains programmes plus récents comme Excel 2007 pour Mac le font pour une raison quelconque.
Sudo

@larsks But altap.cz/salamander/help/salamand/appendix_txtfiles indique qu'il ^Mest utilisé sous UNIX
Vivek le

L'article auquel vous avez lié indique qu'il \nest utilisé dans Unix, ce qui est correct. C'est le code ASCII 10, autrement connu sous le nom ^J.
larsks

39

La plupart des systèmes d'exploitation UNIX ont un utilitaire appelé dos2unixqui convertira le CRLF en LF. Les autres réponses couvrent la question "que sont-ils".


36

Pour ce faire, utilisez une commande plus simple:

dos2unix filename

Cette commande fonctionne également avec les modèles de chemin, par exemple

dos2unix path/name*

Si cela ne fonctionne pas, essayez d'utiliser un mode différent:

dos2unix -c mac filename
  • -cDéfinir le mode de conversion. Où CONVMODE est l' un: ascii, 7bit, iso, macavec asciiêtre la valeur par défaut.

22

Cela a fonctionné pour moi

:e ++ff=dos 

La commande: e ++ ff = dos indique à Vim de relire le fichier, forçant le format de fichier DOS. Vim supprimera les fins de ligne CRLF et LF uniquement, ne laissant que le texte de chaque ligne dans la mémoire tampon.

ensuite

:set ff=unix 

et enfin

:wq 

3
Merci! cela a fonctionné pour moi, mais la solution acceptée ne l'a pas fait
fan de Bjorks numéro un

Fait-il ffréférence au format de fichier? Qu'en est- il ++ff?
KcFnMi

La commande: e ++ ff = dos indique à Vim de relire le fichier, forçant le format de fichier DOS. Vim supprimera les fins de ligne CRLF et LF uniquement, ne laissant que le texte de chaque ligne dans la mémoire tampon.
Stryker

10

La commande est un autre moyen de se débarrasser des retours chariots tr.

J'ai un petit script qui ressemble à ceci

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

Vous pouvez nettoyer cela avec sed:

sed -e 's/^M$//' < infile > outfile

L'astuce consiste à saisir correctement le retour de chariot. En règle générale, vous devez taper C-v C-mpour saisir un retour chariot littéral. Vous pouvez également faire en sorte que sed travaille en place avec

sed -i.bak -e 's/^M$//' infile

2

Qu'est-ce que c'est ^ M?
Le ^ M est un caractère de retour de chariot. Si vous voyez cela, vous voyez probablement un fichier provenant du monde DOS / Windows, où une fin de ligne est marquée par une paire retour chariot / nouvelle ligne, alors que dans le monde Unix, fin de ligne est marqué par une nouvelle ligne.

Comment cela aurait-il pu arriver là?
Quand il y a changement de format de fichier.

Comment puis-je m'en débarrasser?
ouvrez votre dossier avec

vim -b FILE_PATH

enregistrez-le avec la commande suivante

:%s/^M//g

Vous avez une faute de frappe dans ouvrir votre fichier avec .
Mateusz Piotrowski

4
Cette réponse n'ajoute rien aux autres réponses. Le premier paragraphe est une copie presque textuelle de la réponse acceptée. Le code donné ne sauvegardera rien, mais supprimera simplement tous les caractères de retour chariot de toutes les lignes. Et je ne suis pas sûr de savoir comment ouvrir le fichier en mode binaire aidera ici.
Dubu

2

Dans mon cas,

Rien ci-dessus n'a fonctionné, j'ai eu un fichier CSV copié sur une machine Linux à partir de mon mac et j'ai utilisé toutes les commandes ci-dessus, mais rien n'a aidé sauf celui ci-dessous

tr "\015" "\n" < inputfile > outputfile

J'avais un fichier dans lequel ^ M caractères étaient placés entre les lignes, comme ci-dessous

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

Vous pouvez utiliser Vim en mode Ex:

ex -bsc '%s/\r//|x' file
  1. -b mode binaire

  2. % sélectionner toutes les lignes

  3. s remplacer

  4. \r retour chariot

  5. x sauver et fermer


0

Ajoutez la ligne suivante à votre ~ / .vimrc

command! Tounix :call Preserve('1,$s/^M//')

Ensuite, lorsque vous avez un fichier avec les fins de ligne Windows, exécutez la commande ": Tounix".


-1

Dans le passé, j'ai vu que même les fichiers de configuration n'étaient pas analysés correctement et se plaignaient de blancs, mais si vous faites une liste définie, elle ne montrera pas les blancs, grep nomfichier [[espace]] vous montrera ^ M

c'est quand dos2unix fileaide


Cette réponse n'apporte rien de nouveau, does2unix est déjà mentionné au moins dans deux réponses beaucoup plus anciennes.
Rui F Ribeiro Le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.