Quest-ce que «^ M» et comment men débarrasser?

Lorsque jouvre le fichier dans Vim, je vois détranges caractères ^M.

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

  • Quest-ce que cest ^M caractère?

  • Comment a-t-il pu y arriver?

  • Comment men débarrasser?

Commentaires

  • It ‘ est un digraphe de caractères de contrôle, pour plus info: help digraph-table.
  • VS Code a une option EOL en bas qui convertira automatiquement un fichier ouvert.
  • @StackUnderflow lors de lutilisation VSCode, changer les fins de ligne en LF lorsque vous travaillez sur des fichiers Linux aide. Jutilise WSL … Un fichier Windows comme $ profile na aucun problème avec le fichier Linux se terminant par LF. Peut-être que Win bat Linux ici.

Réponse

Le ^M est un caractère de retour chariot. Si vous voyez ceci, vous regardez probablement un fichier qui provient 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 seule nouvelle ligne.

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

Cet article explique comment configurer vim pour éditer de manière transparente des fichiers avec des extrémités différentes. des marqueurs 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 + M pour insérer cela ^M.)

Commentaires

  • Essayez :%s/^M/\r/g à la place pour supprimer ^M et remplacer ^M par le caractère de nouvelle ligne . Sans %, la commande sapplique uniquement à la ligne courante. Et je suis tombé sur des exemples où ^M nest pas à la fin de la ligne, comme The first line.^MThe second line.
  • Ou si vous ne ‘ Je ne veux pas beaucoup de sauts de ligne, vous pouvez simplement faire :%s/^M/
  • Si ‘ est juste un retour chariot en lui-même, qui pourrait être le saut de ligne classique (pré-Unix) Macintosh. Même certains programmes plus récents comme Excel 2007 pour Mac le font pour une raison quelconque.
  • @larsks But altap.cz/salamander/help/salamand/appendix_txtfiles indique que ^M est utilisé sous UNIX
  • Je ne sais pas si ‘ est quelque chose dans ma configuration vim, mais je dois taper Ctrl+Q, puis Ctrl+M pour obtenir ce caractère à générer!

Réponse

Une façon plus simple de le faire est dutiliser 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 dutiliser un mode différent:

dos2unix -c mac filename 
  • -c Définit le mode de conversion. CONVMODE est lun des éléments suivants: ascii, 7bit, iso, mac, ascii étant la valeur par défaut.

Commentaires

  • +1 pour avoir mentionné la valeur par défaut de lindicateur -c et dautres options. Au premier essai, la valeur par défaut ‘ na pas donné les résultats attendus. Avec dos2unix -c max cela a fonctionné. dos2unix: converting file launch_me.sh to Unix format...
  • Un petit utilitaire incroyable. Pour ubuntu, apt-get install dos2unix. Si vous avez besoin de lutiliser de manière récursive, vous pouvez vous référer à cette solution ici: stackoverflow.com/questions/11929461/… Je lai bêtement exécuté manuellement sur chaque répertoire et je nai pensé à le rechercher quaprès coup.

Réponse

Cela a fonctionné pour moi

:e ++ff=dos 

La commande: e ++ ff = dos dit à 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 

Commentaires

  • merci! cela a fonctionné pour moi mais la solution acceptée na pas fonctionné
  • Est-ce que ff fait référence au format de fichier? Quen est-il de ++ff?
  • La commande: e ++ ff = dos dit à 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.
  • Pour en savoir plus sur ff, exécutez « : help ff  »
  • simple et efficace . Je ne sais pas pourquoi cat file1 > > file2 introduit dos line feeds lorsque le fichier 1 didn ‘ t lavoir en premier lieu

Réponse

La plupart des systèmes dexploitation UNIX ont un utilitaire appelé dos2unix qui convertira le CRLF en LF. Les autres réponses couvrent la question « que sont-ils? ».

Réponse

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

Jai un petit script qui ressemble à ceci

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

Réponse

Vous pouvez nettoyer cela avec sed:

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

Lastuce est de savoir comment 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 fonctionner sed en place avec

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

Answer

Sed in -placez la solution sans avoir besoin de taper le caractère spécial (vous pouvez copier ceci et cela fonctionne):

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

Explication:

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

Commentaires

  • Le questionneur était déjà en train de modifier le fichier avec VIM, remarquez. Et il y a eu une réponse sur place sed ici depuis 2012.
  • Oui, mais il manquait une bonne solution fonctionnelle. La solution sed existante ne ‘ t fonctionne pas de la boîte.
  • Dale Hagglund ‘ est dans -place sed certainement fonctionne hors de la boîte.
  • Eh bien, pas pour moi. Je ‘ m sur Ubuntu LTS 18.04.
  • Cela ma aidé à éditer un fichier sur Alpine Linux à partir dun bureau Windows qui compterait Ctrl M comme retour de ligne, rendant les réponses ci-dessus inefficaces.

Réponse

Quoi est-ce ^ M?
Le ^ M est un caractère de retour chariot. Si vous voyez ceci, vous regardez probablement un fichier qui provient 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 un seul saut de ligne.

Comment a-t-il pu y arriver?
Quand là est le changement de format de fichier.

Comment puis-je men débarrasser?
ouvrez votre fichier avec

vim -b FILE_PATH 

enregistrez-le avec la commande suivante

:%s/^M//g 

Commentaires

  • Vous ‘ avez une faute de frappe dans ouvrez votre fichier avec .
  • Cette réponse najoute rien aux autres réponses. Le premier paragraphe est une copie presque textuelle de la réponse acceptée. Le code donné ne sauvegarde rien, mais simplement supprime tous les retours chariot caractères de toutes les lignes. Et je ne sais pas comment ouvrir le fichier en mode binaire elp ici.

Réponse

Dans mon cas,

Rien ci-dessus na fonctionné, je avait un fichier CSV copié sur une machine Linux à partir de mon mac et jai utilisé toutes les commandes ci-dessus mais rien na aidé à part celle ci-dessous

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

Javais un fichier dans lequel ^ M caractères ont été basculé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, 

Commentaires

  • mac2unix -n inputfile outputfile, ou, de manière équivalente, dos2unix -c mac -n inputfile outputfile gérera cette situation.

Réponse

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 enregistrer et fermer

Réponse

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

Réponse

Dans le passé, jai vu même les fichiers de configuration ne sont pas analysés correctement et se plaignent despaces, mais si vous vi et faire une liste densemble, il ne « t affichera pas les espaces, grep filename [[espace]] vous montrera ^ M

cest quand dos2unix file aide

Commentaires

  • Cette réponse napporte rien de nouveau, does2unix est déjà mentionné au moins dans deux réponses beaucoup plus anciennes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *