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
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, commeThe 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
, puisCtrl+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
-
-b
mode binaire -
%
sélectionner toutes les lignes -
s
remplacer -
\r
retour chariot -
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.
help digraph-table
.