GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak uložit odpovídající vzor do proměnné pomocí příkazu „sed“?

Snažím se najít vzor pomocí sed příkaz v file.txt mezi prvním znakem1 a char2 a pak to nahraďte řetězcem. jako níže pomocí echo příklad režimu:

echo "This X is test Y. But X is not test Y." | sed 's/X[^Y]*Y/REPLACE/'

Také musím uložit odpovídající vzor (jako is test {<–mezery kolem jsou důležité} ) v proměnné.

Přijatá odpověď:

Zde je jediné vyvolání sed, které zapíše revidovaný řádek do stdout a zároveň uloží odstraněný text do proměnné shellu var :

$ var=$(echo "This X is test Y. But X is not test Y." | sed -nr 'h;s/[^X]*X([^Y]*)Y.*/\1/;p;x;s/X[^Y]*Y/REPLACE/;w /dev/stderr') 2>&1
This REPLACE. But X is not test Y.

Hodnota var je:

$ echo "==$var=="
== is test ==

Vysvětlení:

  • h

    Tento příkaz zkopíruje aktuální vzor do úložného prostoru.

  • s/[^X]*X([^Y]*)Y.*/\1/;p

    Tím se z prostoru vzoru odstraní vše kromě textu mezi prvním X a Y včetně případných mezer. To se pak vytiskne na stdout. Toto je výstup, který je zachycen shellem a přiřazen k var .

  • x

    Toto zkopíruje zadržovací prostor zpět do prostoru vzoru. Když je toto hotovo, prostor vzoru obsahuje kopii původního vstupního řádku.

  • s/X[^Y]*Y/REPLACE/; w /dev/stderr

    Provede se substituce a výsledek se zapíše do stderr .

  • 2>&1

    Poté, co shell zachytil stdout do var , toto instruuje shell, aby zkopíroval stderr (který má řádek s REPLACE) do stdout.

Pomineme-li manipulaci s proměnnou var

Proměnná var zahrnuje úvodní a koncové mezery. Pokud by shell následně podléhal var k dělení slov by tyto mezery byly odstraněny. Chcete-li tomu zabránit, když var je odkazováno, udělejte to uvnitř dvojitých uvozovek, jako ve výše uvedeném příkladu.


Ubuntu
  1. Jak obnovit databázi MySQL pomocí příkazu v SSH?

  2. Jak nastavit proměnnou prostředí v GDB pomocí příkazu shell?

  3. Jak pomocí příkazu cp v linuxovém shellu zkopíruji celý adresář do jiného adresáře?

  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. Jak uložit výstup příkazu do souboru v Linuxu

  3. Jak spustit Anydesk v Ubuntu pomocí příkazového řádku?

  1. Jak zkontrolovat verzi Ubuntu pomocí příkazového řádku

  2. Jak spustíme příkaz uložený v proměnné?

  3. Jak restartovat Linux pomocí příkazového řádku