GNU/Linux >> Znalost Linux >  >> Linux

Použití více vzorů najednou pomocí příkazu Sed

Zde je otázka od jednoho z našich pravidelných čtenářů, pana Manishe. Jeho otázka zní, jak použít více vzorů najednou pomocí příkazu Sed v Linuxu pro operace mazání nebo nahrazení.

Zvažte příklad souboru obsahujícího následující text. (Používám stejný příklad, o jaký čtenář požádal).

SLURM_CLUSTER_NAME = test
SLURM_JOB_ID = 525595
SLURM_JOB_NAME = test1
SLURM_JOB_USER = test
SLURM_JOB_NODELIST = cn01
SLURM_JOB_UID = 5016
SLURM_JOB_PARTITION = standard-low
SLURM_SUBMIT_DIR = /home/test
SLURM_TASK_PID = 108983
SLURM_CPUS_ON_NODE = 1
SLURM_NTASKS = 
SLURM_TASK_PID = 108983

Nyní čtenář chce jeden Sed příkaz k odstranění řádků, které odpovídají vzoru – SLURM_JOB_USER &SLURM_SUBMIT_DIR ze souboru. Jak to tedy uděláte? Tady to je.

Odstranit vzor pro shodu řádků a vytisknout pomocí Sed

Syntaxe:

$ set '/PATTERN/d' filename
$ sed '/SLURM_JOB_USER/d' test.txt

Výše uvedený příkaz odstraní řádek odpovídající vzoru „SLURM_JOB_USER ‘ a vytiskne výstup na stdout.

Odstranit vzor porovnávání řádků a upravit soubor pomocí Sed

Syntaxe:

$ set -i '/PATTERN/d' filename

'-i' volba změní soubor.

$ sed -i '/SLURM_JOB_USER/d' test.txt

Použití více vzorů najednou se Sed

Co když chcete jedním příkazem Sed odstranit více řádků odpovídajících více vzorům? Tady to je,

Syntaxe:

$ set -i '/PATTERN1/d;/PATTERN2/d' filename
$  sed -i '/SLURM_JOB_USER/d;/SLURM_SUBMIT_DIR/d' test.txt

Výše uvedený příkaz odstraní řádky obsahující SLURM_JOB_USER a SLURM_SUBMIT_DIR vzory a uložte soubor. Všimněte si středníku (;) pro zadání více vzorů v rámci jednoho příkazu.

Nahradit vzor a vytisknout pomocí Sed

Syntaxe:

$ sed 's/PATTERN/REPLACE_STRING/g' test.txt
$ sed 's/SLURM_JOB_USER/REPLACE1/g' test.txt

'g' reprezentuje globální  – nahradí všechny výskyty vzoru v každém řádku, nikoli pouze první (což je výchozí chování)

Nahradit vzor a upravit soubor pomocí Sed

$ sed -i 's/SLURM_JOB_USER/REPLACE1/g' test.txt

Možnost '-i' upraví soubor.

Použití více vzorů najednou se Sed

$ sed -i 's/SLURM_JOB_USER/REPLACE1/g;s/SLURM_SUBMIT_DIR/REPLACE2/g' test.txt

Chcete-li do jediného příkazu přidat další vzory, hledejte středník(;).

Miluji to? Dejte nám vědět, pokud máte dotaz v komentářích níže, a my se pokusíme ho zde pokrýt.

Reference


Linux
  1. Manipulace s textem na příkazovém řádku pomocí sed

  2. Používáte Sed se speciálními znaky?

  3. Použití –exclude With The Du Command?

  1. Jak spustit Grep s více a vzory?

  2. Použití sed k rozdělení řetězce s oddělovačem

  3. Hledání více vzorů (slov) pomocí ack?

  1. Uložit soubor po použití příkazu Sed?

  2. Nahradit text více souborů textem Sed?

  3. Jak přejmenovat více souborů najednou v Linuxu