it-swarm-eu.dev

Převést konce řádků DOSu na konce řádků Linuxu v vim

Pokud otevřu soubory, které jsem vytvořil ve Windows, všechny řádky končí ^M.
Jak smažu tyto znaky najednou?

652
Bert Hekman

dos2unix je nástroj příkazového řádku, který to udělá, nebo :%s/^M//g pokud použijete Ctrl-vCtrl-m pro vložení ^ M, nebo můžete :set ff=unix a vim to udělat za vás.

Dokumenty v nastavení 'fileformat' jsou zde a wiki wiki má komplexní stránky končící konverze .

Alternativně, pokud přesunete soubory tam a zpět hodně, možná nebudete chtít je převést, ale spíše udělat :set ff=dos, takže vim bude vědět, že je to DOS soubor a používá DOS konvence pro řádkové konce.

995
pjz

Změňte konce řádků v zobrazení:

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

To lze také použít jako úložnou operaci (: w sám neuloží pomocí řádků, které vidíte na obrazovce):

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

A můžete ho použít z příkazového řádku:

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

Obvykle používám

:%s/\r/\r/g

což se zdá trochu zvláštní, ale funguje z toho důvodu, že vim odpovídá linefeeds. Také je pro mě snadnější si pamatovat :)

154
t-dub

Dávám přednost následujícímu příkazu:

:set fileformat=unix

Soubor mac nebo dos můžete také použít k převodu souboru na soubor Macintosh nebo na soubor systému souborů MS-DOS/MS-Windows. A nedělá nic, pokud je soubor již ve správném formátu.

Další informace naleznete v nápovědě vim:

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

V Vim, to odřízne všechny přepravy návratu a opustí jen nové řádky.

19
mercutio

:set fileformat=unix převést z dos na unix.

16
13
Alex Gartrell

dos2unix může přímo měnit obsah souboru.

Můžete jej použít přímo v souboru bez nutnosti dočasného přesměrování souborů.

dos2unix input.txt input.txt

Výše uvedené používá předpokládanou americkou klávesnici. Použijte volbu -437 k použití britské klávesnice.

dos2unix -437 input.txt input.txt
9

Převést adresář souborů z dos do Unixu

Pomocí příkazového řádku a sed, najděte všechny soubory v aktuálním adresáři s příponou ".ext" a odstraňte všechny "^ 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;

také, jak je uvedeno výše ^ M Ctrl+V + Ctrl+M (nejen znak "^" a znak M)

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

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

6
MichaelD

S následujícím příkazem:

:%s/^M$//g 

Získejte ^M, který se objeví jako typ CtrlV pak CtrlMCtrlV říká Vimovi, aby vzal další postavu doslovně.

5
Dave Webb

Následující kroky mohou převést formát souboru pro dos na 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.

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

5
ajitomatix

Můžeš použít:

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

nebo dos2unix utility.

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

CtrlM je znak \r nebo carriage return, které koncovky řádků DOS přidají. CtrlV říká vim, aby vložil doslovný CtrlM znak na příkazovém řádku.

Jako celek tento příkaz nahrazuje všechny \r ničím, odstraní je z konců řádků.

4
Rob Wells

Komentář o tom, jak se ^ ^ objevit, je to, co pro mě fungovalo. Pouhé napsání "^ M" v mém vi nemá nic (nenalezeno). CTRL+VCTRL+M posloupnost to udělala dokonale.

Můj pracovní substituční příkaz byl

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

a vypadalo to takto na mé obrazovce:

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

Našel jsem velmi snadný způsob: Otevřete soubor pomocí nano: nano file.txt

Lis CTRL+O uloľit, ale před stisknutím Enter, lis: ALT+D přepínat mezi linkami DOS a Unix/Linux, nebo: ALT+M přepínat mezi linkami Mac a Unix/Linux, pak stiskněte Enter uložit a CTRL+X ukončit.

4
Stefan Sjöberg

Můžete použít následující příkaz:
:%s/^V^M//g
kde „^“ znamená použití CTRL klíč.

3
JayG

níže se používá pro přeformátování veškerého .sh souboru v aktuálním adresáři, otestoval jsem ho na svém OS Fedora.

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

Věděl jsem, že to někde uvidím. Zde je tip pro přihlášení k FreeBSD:

Potřebujete odstranit všechny tyto znaky ^ M z DOS souboru? Snaž se

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

Obvykle je k dispozici příkaz dos2unix, který můžete použít, jen se ujistěte, že jste si přečetli manuál, protože verze [GNU a BSD se liší v tom, jak se s argumenty vypořádávají.

Verze BSD:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

Verze GNU:

dos2unix $FILENAME

Můžete také vytvořit vlastní dos2unix s některou z navrhovaných odpovědí, například:

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

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

Spuštění přímo do konzoly Linuxu: vim file.txt +"set ff=unix" +wq

1
CBuzatu

Vim zadejte:

:w !dos2unix %

Tím se obsah aktuální vyrovnávací paměti převede na příkaz dos2unix a zapíše výsledky do aktuálního obsahu. Vim požádá, aby soubor znovu načetl

1
Tallak Tveide

pokud vytvoříte soubor v programu NotePad nebo NotePad ++ v systému Windows a přivedete jej do systému Linux a otevřete jej vim, uvidíte na konci každého řádku znak ^ M. Chcete-li to odstranit,

V terminálu Linuxu napište

dos2unix filename.ext

To udělá požadovanou magii.

0
Santle Camilus

Ačkoli je toto téma velmi staré, rád bych dal další věci z wiki:

%s/\r\+$//g

vyplňte všechny znaky návratu vozíku (jeden a více opakování) až do konce řádku a vymažte, takže pouze \n zůstane na eolu.

0
loadaverage

Tohle je můj způsob. Otevřel jsem soubor v dos EOL a když uložím soubor, který se automaticky převede na unix EOL

autocmd BufWrite * :set ff=unix
0
Thomas PABST

Chtěl jsem místo linií ^ M nové linie. Perl na záchranu:

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

Nebo zapište na stdout:

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