web-dev-qa-db-fra.com

Qu'est-ce que «^ M» et comment m'en débarrasser?

Lorsque j'ouvre le fichier dans Vim, je vois un étrange ^M personnages.

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

  • Qu'est-ce que c'est ^M personnage?

  • Comment aurait-il pu y arriver?

  • Comment m'en débarrasser?

166
Christoph Wurm

Le ^M est un caractère de retour chariot. Si vous voyez cela, vous regardez probablement un fichier qui a pour origine le 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 seule 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 vous voulez vous en débarrasser, utilisez ceci dans Vim:

:s/^M$//

(Presse Ctrl+VCtrl+M pour insérer ce ^M.)

125
larsks

Une manière plus simple de procéder consiste à utiliser la commande suivante:

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
  • -c Définissez le mode de conversion. Où CONVMODE est l'un des: ascii, 7bit, iso, mac avec ascii étant la valeur par défaut.
49
AnonGeek

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

41
Aaron Brown

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 le tampon. =

puis

:set ff=unix 

et enfin

:wq 
32
Stryker

Une autre façon de se débarrasser des retours chariot est la commande tr.

J'ai un petit script qui ressemble à ça

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

Vous pouvez nettoyer cela avec sed:

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

L'astuce consiste à saisir correctement le retour chariot. En règle générale, vous devez taper C-v C-m pour entrer un retour chariot littéral. Vous pouvez également faire travailler sed avec

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

Qu'est-ce que c'est ^ M?
Le ^ M est un caractère de retour chariot. Si vous voyez cela, vous regardez probablement un fichier qui a pour origine le 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 seule nouvelle ligne.

Comment aurait-il pu y arriver?
En cas de changement de format de fichier.

Comment m'en débarrasser?
ouvrez votre fichier avec

vim -b FILE_PATH

enregistrez-le avec la commande suivante

:%s/^M//g
4
Prashant Kanse

Dans mon cas,

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

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

J'avais un fichier dans lequel ^ M caractères étaient intercalés entre les lignes quelque chose 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,
3
Vishwanath gowda k

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 substitut

  4. \r retour chariot

  5. x enregistrer et fermer

1
Steven Penny

Solution Sed in-place sans avoir besoin de taper le caractère spécial (vous pouvez copier cela et ça marche):

sed -i -e "s/\r//g" filename

Explication:

-i: in-place
-e: regular expression
\r: escaped carriage return
/g: replace globally
0
DreamFlasher

Aucune des options ici n'a fonctionné pour moi.

Enfin ouvert le fichier dans MS Word, et voila le ^ M a disparu. Coupez et collez dans n'importe quel autre éditeur de votre choix.

0
user219042

Dans le passé, j'ai vu que même les fichiers de configuration ne sont pas analysés correctement et se plaignent des espaces blancs, mais si vous vi et faites une liste, il n'affichera pas les espaces blancs, grep filename [[space]] vous montrera ^ M

c'est quand dos2unix file aide

0
Sriram

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".

0
Charlie Dalsass