Sed Nahradit nový řádek mezerou

Sed Nahradit Novy Radek Mezerou



V UNIX/Linuxu je příkaz sed vyhrazeným nástrojem pro úpravu streamů. Může provádět různé operace s textovým tokem, jako je vyhledávání, hledání a nahrazování a vkládání/mazání. Z větší části se však sed používá k vyhledání a nahrazení textového obsahu.

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 .