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