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?
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.
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
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 :)
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
:%s/\r+//g
Dans Vim, cela supprime tous les retours à la ligne et ne laisse que les nouvelles lignes.
:set fileformat=unix
pour convertir de dos en unix.
à partir de: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
[Esc]:% s/\ r $ //
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
@ 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)
tr -d '\15\32' < winfile.txt > unixfile.txt
(voir: http://kb.iu.edu/data/acux.html )
Avec la commande suivante:
:%s/^M$//g
Obtenir le ^M
apparaître CtrlV ensuite CtrlM. CtrlV dit à Vim de prendre le prochain caractère entré littéralement.
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
Vous pouvez utiliser:
vim somefile.txt +"%s/\r/\r/g" +wq
ou dos2unix utility
.
: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.
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
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.
Vous pouvez utiliser la commande suivante::%s/^V^M//g
où "^" signifie utiliser CTRL clé.
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
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]>
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}";
}
Pour exécuter directement dans la console Linux: vim file.txt +"set ff=unix" +wq
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
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.
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.
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
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