Domanda

Se apro il file che ho creato in Windows, le linee terminano tutti con ^M.
Come posso eliminare questi caratteri tutti in una volta?

È stato utile?

Soluzione

dos2unix è una riga di comando programma di utilità che possono fare questo, o :%s/^M//g se si utilizza Ctrl-v Ctrl-m per inserire il ^M, o si può :set ff=unix e vim farlo per voi.

Documenti in 'formato' impostazione sono qui, e vim wiki dispone di una completa pagina on line di fine conversioni.

In alternativa, se si spostare i file avanti e indietro un sacco, si potrebbe non desidera convertire, ma piuttosto a che fare :set ff=dos, così vim so è un file DOS e usare DOS convenzioni per terminazioni di linea.

Altri suggerimenti

Modificare la riga finali di vista:

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

Questo può essere utilizzato anche come operazione di salvataggio (:w la sola a non risparmiare utilizzando i terminatori di linea si vede sullo schermo):

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

E si può usare da riga di comando:

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

Io in genere uso

:%s/\r/\r/g

che sembra un po ' strano, ma funziona a causa del modo che vim partite con caratteri di avanzamento riga.Trovo anche più facile da ricordare :)

Io preferisco usare il seguente comando :

:set fileformat=unix

È inoltre possibile utilizzare mac o dos rispettivamente a convertire il file macintosh o MS-DOS, MS-Windows file convenzione.E non fa nulla se il file è già nel formato corretto.

Per ulteriori informazioni, vedere il vim help :

:help fileformat
:%s/\r+//g

In Vim, che mette a nudo tutti i ritorni a capo, e lascia solo punto e a capo.

:set fileformat=unix per la conversione da dos a unix.

dos2unix è possibile modificare direttamente il contenuto del file.

È possibile utilizzare direttamente sul file, senza bisogno di file temporanei di reindirizzamento.

dos2unix input.txt input.txt

Usi di cui sopra assunto la tastiera US.Utilizzare il -437 opzione per utilizzare la tastiera UK.

dos2unix -437 input.txt input.txt

La conversione di directory di file da dos a Unix

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

inoltre, come già accennato ^M = Ctrl+V + Ctrl+M (non basta digitare il cursore "^" simbolo e M)

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

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

Procedura seguente consente di convertire il formato di file per dos a 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

Con il seguente comando:

:%s/^M$//g 

Ottenere i ^M per apparire tipo CtrlV quindi CtrlM. CtrlV dice a Vim di prendere il carattere successivo è entrato letteralmente.

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

Premere CTRL+O per risparmiare, ma prima di premere Inserire, stampa: ALT+D per alternare tra DOS e Unix/Linux fine riga, oppure: ALT+M per alternare tra Mac e Unix/Linux fine riga, quindi premere Inserire per salvare e CTRL+X per uscire.

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

CtrlM è il carattere \r, o ritorno a capo, che DOS fine riga, aggiungere. CtrlV dice a vim per inserire un valore letterale CtrlM carattere della riga di comando.

Complessivamente, questo comando sostituisce tutti \r con niente, eliminando le estremità delle linee.

È possibile utilizzare:

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

o dos2unix utility .

Il commento su come ottenere il ^M a comparire è quello che ha funzionato per me.Semplicemente digitando "^M" nella mia vi è arrivato nulla (non trovato).Il CTRL+V CTRL+M sequenza di fatto perfettamente però.

Il mio lavoro di sostituzione del comando

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

e sembrava che questo sul mio schermo:

:%s/^M/\r/g

È possibile utilizzare il seguente comando:
:%s/^V^M//g
dove i '^' uso di mezzi CTRL chiave.

al di sotto di comando è utilizzato per riformattare tutto .sh file nella directory corrente, ho provato sulla mia Fedora OS.

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

Di solito c'è un dos2unix comando che è possibile utilizzare per questo, basta assicurarsi di leggere il manuale di GNU e BSD versioni differiscono su come affrontare gli argomenti.

BSD versione:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

La versione GNU:

dos2unix $FILENAME

In alternativa, è possibile creare il proprio dos2unix con qualsiasi proposta risposte qui, per esempio:

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

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

Sapevo di aver già visto da qualche parte.Qui è il FreeBSD login suggerimento:

È necessario rimuovere tutte quelle ^M caratteri da un file di DOS?Provare

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

In vim, tipo:

:w !dos2unix %

Questo tubo il contenuto del buffer di corrente per il dos2unix comando e scrivere i risultati sul contenuto corrente.Vim chiede di ricaricare il file dopo

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

Anche se questo topic è molto vecchio, vorrei mettere altra roba da wikia:

%s/\r\+$//g

che riempire trovare tutte le spese di trasporto di ritorno segni (uno e più ripetizioni) fino alla fine della riga ed eliminare, quindi, solo \n soggiorno presso eol.

Questo è il mio modo.Ho aperto un file in dos EOL e quando salvo il file che verrà automaticamente convertito a unix EOL

autocmd BufWrite * :set ff=unix

se si crea un file in blocco note o NotePad ++ in windows e portare a Linux e all'open da vim, si vedrà ^M alla fine di ogni riga.Per rimuovere questo,

Presso il terminale di Linux, tipo

dos2unix il nome del file.ext

Questo farà la richiesta di magia.

Ho voluto a capo, in luogo di ^M.Perl per il salvataggio:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

O scrivere a stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top