Úvod
Soubory vytvořené v DOS/Windows používají návrat vozíku (\r ) a odřádkování (\n ) pro zakončení řádků. Soubory v Unixu/Linuxu však používají pouze odřádkování.
Proto při přenosu souboru z jednoho systému do druhého nezapomeňte soubory převést.
V tomto tutoriálu se naučíte přenášet soubory z DOSu do Unixu a naopak.
Převod souborů v systému Linux
Existuje několik způsobů, jak můžete přenést soubory tak, aby byly použity příslušné konce řádků. Převeďte soubory pomocí:
dos2unix
příkazunix2dos
příkazsed
příkaz (viz návod k příkazům Linux sed)tr
příkaz- Vi/Vim textový editor (viz cheat sheet pro příkazy Vim)
perl
příkaz one-liner
Možnost 1:Převod DOS na UNIX pomocí příkazu dos2unix
Nejjednodušší způsob, jak převést konce řádků v textovém souboru, je použít dos2unix nástroj.
Nainstalujte nástroj spuštěním příkazu:
sudo apt install dos2unix
nebo:
sudo dnf install dos2unix
Pokud si do systému Linux stáhnete soubor vytvořený v DOS/Windows, můžete jej převést pomocí dos2unix
příkaz:
dos2unix [file_name]
Příkaz převede soubor, aniž by jej uložil v původním formátu. Pokud chcete uložit původní soubor, přidejte -b
atribut před názvem souboru. Tím se vytvoří záložní soubor pod stejným názvem a .bak rozšíření.
dos2unix -b [file_name]
Možnost 2:Převod UNIX na DOS pomocí příkazu unix2dos
Chcete-li převést soubor vytvořený v systému Linux do formátu DOS, spusťte příkaz:
unix2dos [file_name]
Případně přidejte -b
atribut pro uložení původního souboru jako zálohy:
unix2dos -b [file_name]
Možnost 3:Použití příkazu sed
Můžete také použít sed
(editor streamu) příkaz k odstranění řádku návratu vozíku koncovky. Syntaxe příkazu k tomu je:
sed 's/^M$//' [original_file_name]>[converted_file_name]
Místo pouhého psaní ^M
, stiskněte Ctrl+V
a poté Ctrl+M
zadejte symbol návratu vozíku. Při použití sed
zadejte název souboru DOS [original_file_name]
a jak chcete převedený soubor pojmenovat [converted_file_name]
.
Chcete-li změnit formát souboru z Unixu na DOS , použijte příkaz:
sed 's/$/^M/' [original_file_name]>[converted_file_name]
Možnost 4:Použití příkazu tr
Dalším způsobem, jak převést soubor do formátu Unix, je odstranit \r řádky končí znakem tr
příkaz. tr
command je nástroj příkazového řádku pro překlad nebo mazání znaků.
Použijte příkaz v následujícím formátu:
tr -d '\r' < [original_file_name]>[converted_file_name]
Možnost 5:Použití textového editoru Vim
Pomocí textového editoru Vi/Vim můžete také odstranit konce řádků konce řádku ze souborů ve formátu DOS.
Otevřete soubor ve Vi/Vim:
vi [file_name]
Poté stiskněte :
a zadejte následující příkaz Vi/Vim (ujistěte se, že jste zadali Ctrl+V
poté Ctrl+m
místo ^m
):
:%s/^ m //g
Možnost 6:Použití Perl One Liner
Nakonec můžete použít jednořádkový příkaz Perl k odstranění všech \r konce řádků. Pearl on-linery jsou skripty, které se vejdou do jednoho řádku kódu.
Chcete-li nahradit všechny konce konce řádku a konce řádku pouze posuny řádku:
1. Otevřete soubor v textovém editoru Vi/Vim.
2. Stiskněte :
k zobrazení výzvy na příkazovém řádku.
3. Zadejte následující příkaz a stiskněte klávesu Enter:
perl -pi -e 's/\r\n/\n/g' [file_name]
Okamžitě byste měli vidět změny v souboru.
Příklad:Převod ukázkového souboru z DOSu do formátu Unix
Řekněme, že jste si stáhli soubor s názvem sample-dos-file .
Otevřením souboru pomocí textového editoru Vim/Vi byste viděli, že za každým koncem řádku je ^M
(návrat vozíku).
Dalším způsobem, jak vidět, že soubor používá pro zakončení řádků jak návrat vozíku, tak posun řádku, je zobrazit soubor v osmičkových hodnotách.
Chcete-li to provést, spusťte příkaz:
od -bc sample-dos-file.txt
Výstup zobrazuje obsah souboru s jeho osmičkovými hodnotami, jako na obrázku níže. Vidíte, že každý konec řádku je označen osmičkovými hodnotami 015 (\r) a 012 (\n) .
Nyní, abyste převedli soubor a odstranili všechny konce konce řádku, spustili byste příkaz:
dos2unix sample-dos-file
Otevřete stejný soubor ve Vim/Vi. Nezahrnuje žádné ^M
symboly signalizující konec řádku.
Chcete-li ověřit, zda je soubor ve formátu Unix, můžete také otevřít zobrazení obsahu v osmičkových hodnotách. Na výstupu by se mělo zobrazit pouze 012 hodnoty pro \n .