Question

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

Était-ce utile?

La solution

dos2unix est un utilitaire de ligne de commande permettant d'effectuer cette opération ou :% s / ^ M // g si vous utilisez Ctrl - v Ctrl - m pour saisir 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 contient une page en ligne 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 , de sorte que vim saura qu'il s'agit d'un fichier DOS et utilisera Conventions DOS pour les fins de ligne.

Autres conseils

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 sauts de 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.

: définissez fileformat = unix pour convertir de dos en unix.

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

Convertir le répertoire des fichiers de dos en Unix

A l'aide de la ligne de commande et de sed, recherchez tous les fichiers du répertoire en cours portant l'extension "quot.ext". et supprimez tous les "^ M"

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

également, comme mentionné ci-dessus ^ M = Ctrl + V + Ctrl + M (ne vous contentez pas de taper le caret " ^ "symbole et M)

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

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

Les étapes suivantes permettent de 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

Avec la commande suivante:

:%s/^M$//g 

Pour que le ^ M apparaisse, tapez Ctrl V puis Ctrl M . Ctrl V indique à Vim de prendre le prochain caractère saisi littéralement.

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

Appuyez sur CTRL + O pour enregistrer, mais avant d'appuyer sur Entrée , appuyez sur: 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 < kbd> Entrez pour enregistrer et CTRL + X pour quitter.

:g/Ctrl-v Ctrl-m/s///

Ctrl M est le caractère \ r , ou retour chariot, que les fins de ligne DOS ajoutent. Ctrl V indique à vim d'insérer un Ctrl caractère littéral à la ligne de commande.

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

Vous pouvez utiliser:

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

ou utilitaire dos2unix .

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

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

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

La commande ci-dessous est utilisée pour reformater tous les fichiers .sh du répertoire courant, je l’ai testé sur mon système d’exploitation Fedora.

for file in *.sh; do awk '{ sub("\r<*>quot;, ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

Il existe généralement une commande dos2unix que vous pouvez utiliser à cet effet. Assurez-vous simplement de lire le manuel car les versions de 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}";
}

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? Essayez

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

Dans vim, tapez:

:w !dos2unix %

Ceci 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

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

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

%s/\r\+$//g

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

C'est ma façon. J'ai ouvert un fichier en 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 Bloc-notes ou Bloc-notes ++ dans Windows et que vous le transférez sous Linux et l'ouvrez avec vim, vous verrez ^ M à la fin de chaque ligne. Pour le supprimer,

Sur votre terminal Linux, tapez

  

Nom de fichier dos2unix.ext

Cela fera la magie requise.

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 pour écrire sur stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top