it-swarm.it

Convertire le terminazioni di linea DOS in terminazioni di linea Linux in vim

Se apro i file che ho creato in Windows, le righe finiscono con ^M.
Come faccio a eliminare questi caratteri tutti in una volta?

645
Bert Hekman

dos2unix è un'utilità della riga di comando che eseguirà questa operazione, o :%s/^M//g lo utilizzerà se si utilizza Ctrl-vCtrl-m per inserire il ^ M, oppure puoi :set ff=unix e vim lo farà per te.

I documenti nell'impostazione 'fileformat' sono qui , e il wiki di vim ha un completo pagina on line che termina conversioni .

In alternativa, se spostate i file avanti e indietro molto, potreste non volerli convertire, ma piuttosto fare :set ff=dos, così vim saprà che è un file DOS e usa le convenzioni DOS per le terminazioni di riga.

995
pjz

Cambia le terminazioni di linea nella vista:

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

Questo può anche essere usato come operazione di salvataggio (: w da solo non salverà usando le terminazioni di linea che vedi sullo schermo):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

E puoi usarlo dalla riga di comando:

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

Io di solito uso

:%s/\r/\r/g

che sembra un po 'strano, ma funziona a causa del modo in cui vim corrisponde ai linefeed. Trovo anche più facile da ricordare :)

153
t-dub

Preferisco usare il seguente comando:

:set fileformat=unix

Puoi anche utilizzare mac o dos per convertire il tuo file in Macintosh o convenzione di file MS-DOS/MS-Windows. E non fa nulla se il file è già nel formato corretto.

Per ulteriori informazioni, consultare la guida di vim:

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

In Vim, questo elimina tutti i ritorni a capo e lascia solo nuove righe.

19
mercutio

:set fileformat=unix per convertire da dos a unix.

16
13
Alex Gartrell

dos2unix può modificare direttamente il contenuto del file.

È possibile utilizzarlo direttamente sul file, senza necessità di reindirizzamento temporaneo dei file.

dos2unix input.txt input.txt

Quanto sopra usa la presunta tastiera americana. Utilizzare l'opzione -437 per utilizzare la tastiera del Regno Unito.

dos2unix -437 input.txt input.txt
9

Converti directory di file da dos a Unix

Usando la riga di comando e sed, trova tutti i file nella directory corrente con l'estensione ".ext" e rimuovi tutti "^ 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;

inoltre, come detto sopra ^ M Ctrl+V + Ctrl+M (non digitare solo il simbolo "^" del caret e M)

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

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

6
MichaelD

Con il seguente comando:

:%s/^M$//g 

Ottieni il ^M per apparire tipo CtrlV poi CtrlMCtrlV dice a Vim di prendere il prossimo carattere inserito letteralmente.

5
Dave Webb

I seguenti passaggi possono convertire il formato del file da dosare in 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.

Riferimento: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

5
ajitomatix

Puoi usare:

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

o dos2unix utility.

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

CtrlM è il carattere \r, o carriage return, che le terminazioni di riga DOS aggiungono. CtrlV dice a vim di inserire un letterale CtrlM personaggio alla riga di comando.

Considerato nel suo insieme, questo comando sostituisce tutto \r con nulla, rimuovendoli dalle estremità delle linee.

4
Rob Wells

Il commento su come far apparire ^ M è ciò che ha funzionato per me. Digitando semplicemente "^ M" nel mio vi non ha ottenuto nulla (non trovato). Il CTRL+VCTRL+M sequenza lo ha fatto perfettamente però.

Il mio comando di sostituzione funzionante era

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

e sembrava sul mio schermo:

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

Ho trovato un modo molto semplice: apri il file con nano: nano file.txt

Stampa CTRL+O per salvare, ma prima di premere Enter, stampa: ALT+D per commutare tra terminazioni di linea DOS e Unix/Linux, o: ALT+M per passare da terminazioni di linea Mac e Unix/Linux quindi premere Enter per salvare e CTRL+X abbandonare.

4
Stefan Sjöberg

È possibile utilizzare il seguente comando:
:%s/^V^M//g
dove "^" significa uso CTRL chiave.

3
JayG

sotto comando è usato per riformattare tutti i file .sh nella directory corrente, l'ho testato sul mio sistema operativo Fedora.

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

Sapevo di averlo visto da qualche parte. Ecco il suggerimento per l'accesso a FreeBSD:

Hai bisogno di rimuovere tutti quei caratteri ^ M da un file DOS? Provare

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

Di solito c'è un comando dos2unix che puoi usare per questo, assicurati solo di leggere il manuale poiché le versioni GNU e BSD differiscono sul modo in cui trattano gli argomenti.

Versione BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Versione GNU:

dos2unix $FILENAME

In alternativa, puoi creare il tuo dos2unix con una qualsiasi delle risposte proposte qui, ad esempio:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}
1
dsm

Per eseguire direttamente nella console di linux: vim file.txt +"set ff=unix" +wq

1
CBuzatu

In vim, digitare:

:w !dos2unix %

Questo condurrà il contenuto del buffer corrente al comando dos2unix e scriverà i risultati sui contenuti correnti. Vim chiederà di ricaricare il file dopo

1
Tallak Tveide

se crei un file in NotePad o NotePad ++ in Windows e lo porti su Linux e lo apri da vim, vedrai ^ M alla fine di ogni riga. Per rimuovere questo,

Al tuo terminale Linux, digita

dos2unix nomefile.ext

Questo farà la magia richiesta.

0
Santle Camilus

Anche se questo argomento è molto vecchio, mi piacerebbe mettere un altro materiale da wikia:

%s/\r\+$//g

quel riempimento trova tutti i segni di ritorno a capo (uno e più ripetizioni) fino alla fine della riga e cancella, quindi solo \n rimarrà in eol.

0
loadaverage

Questa è la mia strada. Ho aperto un file in dos EOL e quando salvo il file che verrà convertito automaticamente in EOL unix

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Volevo le newlines al posto delle ^ M's. Perl al salvataggio:

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

O per scrivere su stdout:

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