web-dev-qa-db-fra.com

Convertir les fins de ligne DOS en fins de ligne Linux dans vim

Si j'ouvre des fichiers créés sous Windows, toutes les lignes se terminent par ^M.
Comment puis-je supprimer ces caractères en même temps?

673
Bert Hekman

dos2unix est un utilitaire en ligne de commande qui le fera, ou bien :%s/^M//g si vous utilisez Ctrl-vCtrl-m pour entrer le ^ M, ou vous pouvez :set ff=unix et vim le fera pour vous.

Les documents sur le paramètre 'fileformat' sont ici , et le wiki vim a une version complète page sur les conversions mettant fin aux conversions .

Alternativement, si vous déplacez beaucoup de fichiers, vous ne voudrez peut-être pas les convertir, mais plutôt 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.

1021
pjz

Modifiez les fins de ligne dans la vue:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

Ceci 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 depuis la ligne de commande:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done
260
Ludvig A. Norin

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 retours à la ligne. Je trouve aussi plus facile de me souvenir :)

155
t-dub

Je préfère utiliser la commande suivante:

:set fileformat=unix

Vous pouvez également utiliser mac ou dos pour convertir respectivement votre fichier en convention de fichier Macintosh ou MS-DOS/MS-Windows. Et cela ne fait rien si le fichier est déjà au bon format.

Pour plus d'informations, consultez l'aide de vim:

:help fileformat
81
Sylvain Defresne
:%s/\r+//g

Dans Vim, cela supprime tous les retours à la ligne et ne laisse que les nouvelles lignes.

19
mercutio

:set fileformat=unix pour convertir de dos en unix.

17
Martin Sjögren
13
Alex Gartrell

dos2unix peut modifier directement le contenu du fichier.

Vous pouvez l'utiliser directement 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
9

Convertir le répertoire des fichiers de dos en Unix

En utilisant la ligne de commande et sed, trouvez tous les fichiers du répertoire en cours portant l’extension ".ext" et supprimez tous les "^ M".

@ https://Gist.github.com/sparkida/777317

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 tapez pas simplement le symbole "^" du signe caret et M)

8
Sparkida
tr -d '\15\32' < winfile.txt > unixfile.txt

(voir: http://kb.iu.edu/data/acux.html )

7
MichaelD

Avec la commande suivante:

:%s/^M$//g 

Obtenir le ^M apparaître CtrlV ensuite CtrlMCtrlV dit à Vim de prendre le prochain caractère entré littéralement.

5
Dave Webb

Les étapes suivantes peuvent convertir le format de fichier pour 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

5
ajitomatix

Vous pouvez utiliser:

vim somefile.txt +"%s/\r/\r/g" +wq

ou dos2unix utility.

4
Christy Wald
:g/Ctrl-v Ctrl-m/s///

CtrlM est le caractère \r ou le retour à la ligne ajouté par les fins de ligne DOS. CtrlV dit à vim d'insérer un littéral CtrlM caractère en ligne de commande.

Dans son ensemble, cette commande remplace tout \r par rien, en les supprimant à la fin des lignes.

4
Rob Wells

Le commentaire sur le fait de faire apparaître le ^ M est ce qui a fonctionné pour moi. Il suffit de taper "^ M" dans mon vi n'a rien (non trouvé). le CTRL+VCTRL+M séquence a parfaitement fait cependant.

Ma commande de substitution de travail était

:%s/Ctrl-V Ctrl-M/\r/g

et cela ressemblait à ceci sur mon écran:

:%s/^M/\r/g
4
Dannid

J'ai trouvé un moyen très simple: Ouvrez le fichier avec nano: nano file.txt

Presse CTRL+O pour sauvegarder, mais avant d'appuyer sur Enter, presse: ALT+D pour basculer entre les fins de ligne DOS et Unix/Linux, ou: ALT+M pour basculer entre les fins de ligne Mac et Unix/Linux, puis appuyez sur Enter pour sauver et CTRL+X quitter.

4
Stefan Sjöberg

Vous pouvez utiliser la commande suivante:
:%s/^V^M//g
où "^" signifie utiliser CTRL clé.

3
JayG

la commande ci-dessous est utilisée pour reformater tout le fichier .sh du répertoire courant, 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
2
user3220487

Je savais que j'avais vu ça quelque part. Voici le conseil de connexion FreeBSD:

Besoin de supprimer tous ces ^ M caractères d'un fichier DOS? Essayer

tr -d \\r < dosfile > newfile
    -- Originally by Dru <[email protected]>
1
Albaro Pereyra

Vous pouvez généralement utiliser la commande dos2unix pour cela. Assurez-vous de lire le manuel, car les versions GNU et BSD diffèrent quant à la manière dont elles gèrent les arguments.

Version BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Version GNU:

dos2unix $FILENAME

Vous pouvez également créer votre propre 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}";
}
1
dsm

Pour exécuter directement dans la console Linux: vim file.txt +"set ff=unix" +wq

1
CBuzatu

Dans vim, tapez:

:w !dos2unix %

Cela dirigera le contenu de votre tampon actuel vers la commande dos2unix et écrira les résultats sur le contenu actuel. Vim demandera de recharger le fichier après

1
Tallak Tveide

si vous créez un fichier dans Bloc-notes ou Bloc-notes ++ dans Windows et que vous l'amenez sous Linux et l'ouvrez avec vim, vous verrez ^ M à la fin de chaque ligne. Pour enlever ça,

Sur votre terminal Linux, tapez

dos2unix nomfichier.ext

Cela fera la magie requise.

0
Santle Camilus

Bien que ce sujet soit très ancien, j'aimerais ajouter un autre article de wikia:

%s/\r\+$//g

qui remplissent tous les signes de retour de chariot (un ou plusieurs représentants) jusqu’à la fin de la ligne et les suppriment, ainsi \n restera à eol.

0
loadaverage

C'est mon chemin. J'ai ouvert un fichier en dos EOL et quand je sauvegarde le fichier qui sera automatiquement converti en unix EOL

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Je voulais des nouvelles lignes à la place des ^ M's. Perl à la rescousse:

Perl -pi.bak -e 's/\x0d/\n/g' Excel_created.txt

Ou écrire sur stdout:

Perl -p -e 's/\x0d/\n/g' < Excel_created.txt
0
user3379574