V této příručce předvedeme nahrazení nových řádků mezerou pomocí sed.
Použití sed pro nahrazení textu
Nejprve se rychle podíváme na provádění základního hledání a nahrazení pomocí sed. Stejná metoda bude použita při nahrazení nových řádků mezerami s některými dalšími možnostmi. Struktura příkazu je následující:
$ sed -e 's///'
Podívejte se na následující příkaz:
$ echo 'rychlá hnědá liška' | sed -e 's/quick/fast/g'
Příkaz echo vytiskne řetězec do STDOUT . STDOUT stream je pak potrubím do sed. Instruovali jsme sed, aby nahradil jakoukoli instanci rychlého nahrazení rychlým. Nakonec se výstup vytiskne na obrazovku.
Nahrazení nových řádků mezerou
Pro demonstraci jsem vytvořil následující textový soubor test.txt s několika fiktivními obsahy:
$ test kočky.txt
Příkaz sed přijímá regulární výrazy pro popis různých vzorů. S využitím této funkce popíšeme nový řádek jako \n. Zkusme nahradit nové řádky mezerami:
$ sed -e 's/\n/ /g' test.txt
To však nefungovalo podle očekávání. K dosažení tohoto cíle potřebujeme nějaké další možnosti. Podívejte se na následující příkaz:
$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt
Příkaz sed má více sekcí; každý označuje konkrétní úkol:
- :a: Vytvoří štítek „a“
- N: Připojí další řádek do prostoru vzoru
- $!ba: Pokud není poslední řádek, vrátí se na štítek „a“
- s/\n/ /g: Vyhledá a nahradí nový řádek (\n) mezerou (/ /). Vzor se shoduje globálně (/g)
Příkaz sed prochází kroky, dokud nedosáhne posledního řádku, přičemž všechny znaky \n nahradí mezerou.
Namísto tohoto složitého příkazu můžeme věci zjednodušit použitím parametru -z, který určuje sed pro práci se záznamy oddělenými nulou. Příkaz by vypadal takto:
$ sed -z -e 's/\n/ /g' test.txt
Alternativní metody
I když sed zvládne tento úkol v pohodě, existují některé alternativní nástroje. V této části stručně prozkoumáme několik z nich.
V následujícím příkladu můžeme pomocí příkazu tr jednoduchým způsobem nahradit nový řádek mezerou:
$ tr '\n' ' ' < test.txt
K této práci můžeme také použít perl. Následující syntaxe je také podobná té, kterou jsme použili u sed (ale zjednodušená):
$ perl -p -e 's/\n/ /' test.txt
Dalším způsobem, jak nahradit nové řádky mezerami, je použití příkazu vložit. Všimněte si, že může odstranit pouze jeden znak:
$ paste -s -d ' ' test.txt
Podobně jako sed přichází Linux s dalším nástrojem awk. Podobně jako sed může také provádět některé pokročilé náhrady na vstupu. Pro náš účel použijte následující příkaz awk:
$ awk 1 ORS=' ' test.txt
Závěr
Tato příručka prozkoumala, jak můžeme nahradit nový řádek mezerou pomocí sed. Bylo toho dosaženo dvěma různými způsoby. Tato příručka také obsahuje další relevantní nástroje, které můžeme použít k nahrazení nového řádku mezerami.
Namísto použití složitých příkazů, které je těžké si zapamatovat, používáme skriptování Bash k provádění mnoha věcí v Linuxu. I když je to za cenu určitého výkonu, flexibilita a použitelnost za to stojí. Dozvědět se víc o Bash skriptování pro začátečníky .