Si j'ouvre des fichiers que j'ai créés dans Windows, les lignes se terminent toutes par ^M
.
Comment supprimer ces caractères d'un coup?
Si j'ouvre des fichiers que j'ai créés dans Windows, les lignes se terminent toutes par ^M
.
Comment supprimer ces caractères d'un coup?
Réponses:
dos2unix est un utilitaire de ligne de commande qui le fera, ou le :%s/^M//g
fera si vous utilisez Ctrl- v Ctrl- mpour saisir le ^ M, ou vous pouvez :set ff=unix
et vim le fera pour vous.
Les documents sur le paramètre «format de fichier» sont ici , et le wiki vim a une page complète sur les conversions de fin de ligne .
Alternativement, si vous déplacez beaucoup de fichiers dans les deux sens, vous ne voudrez peut-être pas les convertir, mais plutôt pour le faire :set ff=dos
, donc vim saura qu'il s'agit d'un fichier DOS et utilisera les conventions DOS pour les fins de ligne.
:%s/^M//g
devrait être :%s/\r//g
, car ^M
signifie simplement "correspondre à la majuscule" M "au début de la ligne".
:%s/\r//g
fonctionné pour moi, cheers @Bunyk
set ff=unix
ne fait rien. Peut-être qu'il convertit le fichier, mais tous les ^M
personnages sont toujours là.
Modifiez les fins de ligne dans la vue:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
Cela peut également être utilisé comme opération de sauvegarde (: w seul ne sauvegardera pas en utilisant les fins de ligne que vous voyez à l'écran):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
Et vous pouvez l'utiliser à partir de la ligne de commande:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
est tellement plus agréable que la plupart des autres choses écrites ici, et le script bash est un bon bonus.
:e
commandes ne semblent rien faire sur mon installation de Windows vim. Ma vue montre toujours les ^M
codes.
J'utilise généralement
:%s/\r/\r/g
ce qui semble un peu étrange, mais fonctionne à cause de la façon dont vim correspond aux sauts de ligne. Je trouve aussi plus facile de m'en souvenir :)
:set ff=unix
auparavant, mais le fichier que j'ai ouvert aujourd'hui a dû être particulièrement étrange. Vim a dit que c'était déjà le cas fileformat=unix
mais que toutes les fins de ligne l'étaient ^M
. Cette solution a fonctionné pour moi.
:%s/\r//g
fonctionne plutôt pour moi.
:%s/\r//g
est la seule solution à usage général - en particulier pour les fichiers en mode mixte contenant un mélange hétérogène de nouvelles lignes de style DOS et UNIX. Les solutions canoniques (par exemple :set ff=unix
, :e ++ff=unix
) prennent toutes les lignes des extrémités de tampon courant dans le même style de saut de ligne. Parfois, ils le font; parfois non. Cue sadface.
Je préfère utiliser la commande suivante:
:set fileformat=unix
Vous pouvez également utiliser mac
ou dos
pour convertir respectivement votre fichier en macintosh ou convention de fichiers MS-DOS / MS-Windows. Et cela ne fait rien si le fichier est déjà au format correct.
Pour plus d'informations, consultez l'aide de vim:
:help fileformat
^M
caractères.
set fileformat=unix
à mon fichier .vimrc a fonctionné.
:set fileformat=unix
pour convertir de dos à unix.
:%s/\r+//g
Dans Vim, cela supprime tous les retours chariot et ne laisse que des retours à la ligne.
:%s/\r//g
il fonctionnait comme un charme.
à partir de: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Échap]:% s / \ r $ //
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
aussi, comme mentionné ci-dessus ^ M = Ctrl+V+ Ctrl+M(ne vous contentez pas de taper le symbole caret "^" et M)
dos2unix
peut modifier directement le contenu du fichier.
Vous pouvez directement l'utiliser sur le fichier, sans avoir besoin de redirection de fichier temporaire.
dos2unix input.txt input.txt
Ce qui précède utilise le clavier américain supposé. Utilisez l' -
option 437 pour utiliser le clavier britannique.
dos2unix -437 input.txt input.txt
tr -d '\15\32' < winfile.txt > unixfile.txt
(voir: http://kb.iu.edu/data/acux.html )
Les étapes suivantes peuvent convertir le format de fichier de dos en unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.
Référence: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
Le commentaire à propos de l'apparition du ^ M est ce qui a fonctionné pour moi. Le simple fait de taper "^ M" dans mon vi n'a rien (introuvable). Le CTRL+ V CTRL+M séquence a parfaitement fait.
Ma commande de substitution de travail était
:%s/Ctrl-V Ctrl-M/\r/g
et ça ressemblait à ça sur mon écran:
:%s/^M/\r/g
:%s
place du :1,$s
. %
est un raccourci pour 1,$
.
J'ai trouvé un moyen très simple: Ouvrez le fichier avec nano: nano file.txt
Appuyez sur CTRL+ Opour enregistrer, mais avant d'appuyer sur Enter, appuyez sur:ALT + Dpour basculer entre les fins de ligne DOS et Unix / Linux, ou: ALT+ Mpour basculer entre les fins de ligne Mac et Unix / Linux, puis appuyez sur Enterpour enregistrer et CTRL+ Xpour quitter.
^M
fins. enregistrer sous dos pour conserver, enregistrer sous linux pour supprimer. peut vérifier en utilisantcat -v
:g/Ctrl-v Ctrl-m/s///
CtrlMest le caractère \r
, ou retour chariot, ajouté par les fins de ligne DOS. CtrlVindique à vim d'insérer un CtrlMcaractère littéral sur la ligne de commande.
Pris dans son ensemble, cette commande remplace tout \r
par rien, en les supprimant de la fin des lignes.
Vous pouvez utiliser:
vim somefile.txt +"%s/\r/\r/g" +wq
ou dos2unix utility
.
Dans vim, saisissez:
:w !dos2unix %
Cela dirigera le contenu de votre tampon actuel vers la commande dos2unix et écrira les résultats sur le contenu actuel. Vim vous demandera de recharger le fichier après
Il y a généralement un dos2unix
commande que vous pouvez utiliser pour cela, assurez-vous simplement de lire le manuel car les versions GNU et BSD diffèrent sur la façon dont elles traitent les arguments.
Version BSD:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
Version GNU:
dos2unix $FILENAME
Alternativement, vous pouvez créer la vôtre dos2unix
avec l'une des réponses proposées ici, par exemple:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
Je savais que j'avais vu ça quelque part. Voici l'astuce de connexion à FreeBSD:
Besoin de supprimer tous ces caractères ^ M d'un fichier DOS? Essayer
tr -d \\r < dosfile > newfile
-- Originally by Dru <genesis@istar.ca>
Bien que ce sujet soit très ancien, j'aimerais mettre un autre truc de Wikia:
%s/\r\+$//g
qui remplissent trouver tous les signes de retour chariot (un et plusieurs représentants) jusqu'à la fin de la ligne et supprimer, \n
restera donc à eol.
C'est mon chemin. J'ai ouvert un fichier dans dos EOL et quand j'enregistre le fichier qui sera automatiquement converti en unix EOL
autocmd BufWrite * :set ff=unix
si vous créez un fichier dans NotePad ou NotePad ++ dans Windows et que vous le portez à Linux et l'ouvrez par vim, vous verrez ^ M à la fin de chaque ligne. Pour supprimer cela,
Sur votre terminal Linux, saisissez
dos2unix filename.ext
Cela fera la magie requise.
Je voulais des nouvelles lignes à la place des ^ M. Perl à la rescousse:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
Ou pour écrire à stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
hexdump -C badfile
et voyez0x0d 0x0a
"\r\n"
que c'est votre problème.