Si vous faites un hexdump -C badfileet voyez 0x0d 0x0a"\r\n"que c'est votre problème.
Yzmir Ramirez
Réponses:
1075
dos2unix est un utilitaire de ligne de commande qui le fera, ou le :%s/^M//gfera si vous utilisez Ctrl- vCtrl- mpour saisir le ^ M, ou vous pouvez :set ff=unixet vim le fera pour vous.
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//gdevrait être :%s/\r//g, car ^Msignifie simplement "correspondre à la majuscule" M "au début de la ligne".
Bunyk
78
Pas si vous faites comme le dit la réponse et «utilisez ctrl-v ctrl-m pour saisir le ^ M».
pjz
2
crtl-v n'est pas bon, sur Windows, il colle le contenu du presse-papiers à la ligne de commande. La solution a :%s/\r//gfonctionné pour moi, cheers @Bunyk
roblogic
3
@ropata Ce que vous voulez sous Windows est ctrl-q .
ruffin
2
Je dois manquer quelque chose, car set ff=unixne fait rien. Peut-être qu'il convertit le fichier, mais tous les ^Mpersonnages sont toujours là.
felwithe
276
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
Merci beaucoup. J'ai essayé vi + ': wq ++ ff = unix' <filepath> pour un paresseux comme moi.
a_secenthusiast
2
Ce devrait être la réponse la plus votée. :w +ff=unixest tellement plus agréable que la plupart des autres choses écrites ici, et le script bash est un bon bonus.
mkasberg
Les :ecommandes ne semblent rien faire sur mon installation de Windows vim. Ma vue montre toujours les ^Mcodes.
Grant Birchmeier
160
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 :)
Cela fonctionne de manière cohérente sur toutes les plateformes. La meilleure réponse ici.
thebigjc
4
Je n'ai jamais eu de problème :set ff=unixauparavant, 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=unixmais que toutes les fins de ligne l'étaient ^M. Cette solution a fonctionné pour moi.
Chris B
15
Cette solution ajoute des lignes supplémentaires indésirables pour moi, doublant le nombre de lignes dans le fichier. :%s/\r//gfonctionne plutôt pour moi.
Victor Zamanian
3
Victor, vos fichiers ont probablement des terminaisons \ r \ n. le \ r n'est pas lu comme une nouvelle ligne mais le \ n l'est. Dans les fichiers que je rencontre sont \ r et vous devez ajouter un caractère de nouvelle ligne.
Joeyjoejoejr
2
@ VictorZamanian :%s/\r//gest 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.
Cecil Curry
97
Je préfère utiliser la commande suivante:
:set fileformat=unix
Vous pouvez également utiliser macou dospour 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:
+1 pour pointer vers le site officiel de doc. Pour toute personne utilisant le lien ci-dessus, consultez la section "Conversion du fichier actuel" sur cette page.
The Tin Man
Ce + vim -b <nom de fichier> a fonctionné comme un charme, merci, +1
Jan Molak
10
Convertir un répertoire de fichiers de dos vers Unix
En utilisant la ligne de commande et sed, recherchez tous les fichiers dans le répertoire courant avec l'extension ".ext" et supprimez tous les "^ M"
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.
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+ VCTRL+M séquence a parfaitement fait.
Vous pouvez utiliser à la :%splace du :1,$s. %est un raccourci pour 1,$.
The Tin Man
5
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.
fait cela sur un serveur linux, le fichier avait des ^Mfins. enregistrer sous dos pour conserver, enregistrer sous linux pour supprimer. peut vérifier en utilisantcat -v
HattrickNZ
Cette question concerne vim, pas nano.
Grant Birchmeier
5
: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 \rpar rien, en les supprimant de la fin des lignes.
la commande ci-dessous est utilisée pour reformater tous les fichiers .sh dans le répertoire actuel, je l'ai testé sur mon système d'exploitation Fedora.
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
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.
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, \nrestera donc à eol.
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,
hexdump -C badfile
et voyez0x0d 0x0a
"\r\n"
que c'est votre problème.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.la source
:%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 @Bunykset 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:
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):
Et vous pouvez l'utiliser à partir de la ligne de commande:
la source
: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
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 :)
la source
: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 casfileformat=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:
Vous pouvez également utiliser
mac
oudos
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:
la source
^M
caractères.set fileformat=unix
à mon fichier .vimrc a fonctionné.:set fileformat=unix
pour convertir de dos à unix.la source
Dans Vim, cela supprime tous les retours chariot et ne laisse que des retours à la ligne.
la source
:%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 $ //
la source
Convertir un répertoire de fichiers de dos vers Unix
En utilisant la ligne de commande et sed, recherchez tous les fichiers dans le répertoire courant avec l'extension ".ext" et supprimez tous les "^ M"
@ https://gist.github.com/sparkida/7773170
aussi, comme mentionné ci-dessus ^ M = Ctrl+V+ Ctrl+M(ne vous contentez pas de taper le symbole caret "^" et M)
la source
dos2unix
peut modifier directement le contenu du fichier.Vous pouvez directement l'utiliser sur le fichier, sans avoir besoin de redirection de fichier temporaire.
Ce qui précède utilise le clavier américain supposé. Utilisez l'
-
option 437 pour utiliser le clavier britannique.la source
(voir: http://kb.iu.edu/data/acux.html )
la source
Les étapes suivantes peuvent convertir le format de fichier de dos en unix:
Référence: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
la source
Avec la commande suivante:
Obtenez le
^M
pour apparaître le type CtrlValors CtrlM. CtrlVdit à Vim de prendre le prochain caractère entré littéralement.la source
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
et ça ressemblait à ça sur mon écran:
la source
:%s
place du:1,$s
.%
est un raccourci pour1,$
.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.
la source
^M
fins. enregistrer sous dos pour conserver, enregistrer sous linux pour supprimer. peut vérifier en utilisantcat -v
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.la source
Vous pouvez utiliser:
ou
dos2unix utility
.la source
Vous pouvez utiliser la commande suivante:
:%s/^V^M//g
où le '^' signifie utiliser la CTRLclé.
la source
la commande ci-dessous est utilisée pour reformater tous les fichiers .sh dans le répertoire actuel, je l'ai testé sur mon système d'exploitation Fedora.
la source
Dans vim, saisissez:
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
la source
Pour exécuter directement dans la console Linux:
vim file.txt +"set ff=unix" +wq
la source
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:
Version GNU:
Alternativement, vous pouvez créer la vôtre
dos2unix
avec l'une des réponses proposées ici, par exemple:la source
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
la source
Bien que ce sujet soit très ancien, j'aimerais mettre un autre truc de Wikia:
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.la source
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
la source
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
Cela fera la magie requise.
la source
Je voulais des nouvelles lignes à la place des ^ M. Perl à la rescousse:
Ou pour écrire à stdout:
la source