Zkušený uživatel Linuxu přesně ví, jaký druh nepříjemnosti mohou být prázdné řádky ve zpracovatelném souboru. Tyto prázdné/prázdné řádky nejenže překážejí správnému zpracování takových souborů, ale také znesnadňují běžícímu programu čtení a zápis souboru.
V prostředí operačního systému Linux je možné implementovat několik výrazů pro manipulaci s textem, abyste se zbavili těchto prázdných/prázdných řádků ze souboru. V tomto článku prázdné/prázdné řádky odkazují na mezery.
Vytvořte soubor s prázdnými/prázdnými řádky v Linuxu
Potřebujeme vytvořit referenční soubor s několika prázdnými/prázdnými řádky. Později to v článku upravíme pomocí několika technik, o kterých budeme diskutovat. Ze svého terminálu vytvořte textový soubor podle svého výběru s názvem jako „i_have_blanks ” a vyplňte jej daty a mezerami.
$ nano i_have_blanks.txt Or $ vi i_have_blanks.txt
V celém článku budeme zobrazovat obsah souboru na našem terminálu pomocí příkazu cat pro flexibilní odkazování.
$ cat i_have_blanks.txt
Tři linuxové příkazy, které nás poženou k ideálnímu řešení tohoto problému s prázdnými/prázdnými řádky, jsou grep, sed a awk .
Vytvořte si proto tři kopie souboru i_have_blanks.txt soubor a uložte je pod různými názvy, aby každý mohl být přizpůsoben jednomu ze tří uvedených linuxových příkazů.
Prostřednictvím regulárního výrazu (regulární výrazy ), můžeme identifikovat prázdné řádky se standardním znakem POSIX “[:space:]”
.
Jak odstranit prázdné/prázdné řádky v souborech
S tímto prohlášením o problému uvažujeme o odstranění všech existujících prázdných/prázdných řádků z daného čitelného souboru pomocí následujících příkazů.
1. Odstraňte prázdné řádky pomocí příkazu Grep
Podporované použití tříd zkrácených znaků může redukovat příkaz grep na jednoduchý, jako je:
$ grep -v '^[[:space:]]*$' i_have_blanks.txt OR $ grep '\S' i_have_blanks.txt
Chcete-li opravit soubor s prázdnými/prázdnými řádky, výše uvedený výstup musí před přepsáním původního souboru projít dočasným souborem.
$ grep '\S' i_have_blanks.txt > tmp.txt $ mv tmp.txt i_have_blanks.txt $ cat i_have_blanks.txt
Jak můžete vidět, všechny prázdné řádky, které oddělovaly obsah tohoto textového souboru, jsou pryč.
2. Odstraňte prázdné řádky pomocí příkazu Sed
d
akce v příkazu říká, že má odstranit všechny existující mezery ze souboru. Mechanismus porovnávání a mazání prázdných řádků tohoto příkazu lze znázornit následujícím způsobem.
$ sed '/^[[:space:]]*$/d' i_have_blanks_too.txt
Výše uvedený příkaz vyhledá neprázdné znaky v řádcích textového souboru a odstraní všechny zbývající znaky. Díky podpoře třídy neprázdných znaků lze výše uvedený příkaz zjednodušit na následující:
$ sed '/\S/!d' i_have_blanks_too.txt
Také kvůli podpoře úprav přímo na místě nepotřebujeme dočasný soubor, který by dočasně podržel náš převedený soubor před přepsáním původního textového souboru, jako v případě příkazu grep. Musíte však použít tento příkaz s -i
možnost jako argument.
$ sed -i '/\S/!d' i_have_blanks_too.txt i_have_blanks_too.txt $ cat i_have_blanks_too.txt
3. Odstraňte prázdné řádky pomocí příkazu Awk
Příkaz awk spustí kontrolu nebílých znaků na každém řádku souboru a vytiskne je pouze v případě, že je tato podmínka splněna. Flexibilita tohoto příkazu přichází s různými způsoby implementace. Jeho jednoduché řešení je následující:
$ awk '!/^[[:space:]]*$/' i_have_blanks_first.txt
Interpretace výše uvedeného příkazu je jednoduchá, vytisknou se pouze řádky souboru, které neexistují jako mezery. Delší verze výše uvedeného příkazu bude vypadat podobně jako následující:
$ awk '{ if($0 !~ /^[[:space:]]*$/) }' i_have_blanks_first.txt
Prostřednictvím awk podpora neprázdných znaků třídy, výše uvedený příkaz může být také reprezentován následujícím způsobem:
$ awk -d '/\S/' i_have_blanks_first.txt
-d
možnost umožňuje awk vypsat poslední řádky souboru na systémový terminál. Jak vidíte, soubor již nemá mezery.
Tyto tři diskutovaly a implementovaly řešení pro řešení prázdných řádků ze souborů pomocí grep , sed a awk příkazy nás zavedou dlouhou cestu k implementaci stabilních a efektivních operací čtení a zápisu souborů v systému Linux.