Hier ist eine Frage von einem unserer regelmäßigen Leser, Herrn Manish. Seine Frage ist, wie man mehrere Muster gleichzeitig mit dem Sed-Befehl in Linux für Lösch- oder Ersetzungsoperationen verwenden kann.
Stellen Sie sich eine Beispieldatei vor, die den folgenden Text enthält. (Ich verwende dasselbe Beispiel, nach dem der Leser gefragt hat).
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
Jetzt will der Leser einen einzelnen Sed
Befehl zum Löschen der Zeilen, die dem Muster entsprechen – SLURM_JOB_USER
&SLURM_SUBMIT_DIR
aus der Datei. Wie machst du das? Los geht's.
Linienvergleichsmuster löschen und mit Sed drucken
Syntax:
$ set '/PATTERN/d' filename
$ sed '/SLURM_JOB_USER/d' test.txt
Der obige Befehl löscht die Zeile, die dem Muster ‘SLURM_JOB_USER
entspricht ‘ und gibt die Ausgabe auf der Standardausgabe aus.
Lösche das Zeilenabgleichsmuster und ändere die Datei mit Sed
Syntax:
$ set -i '/PATTERN/d' filename
Das '-i'
Option ändert die Datei.
$ sed -i '/SLURM_JOB_USER/d' test.txt
Mehrere Muster gleichzeitig mit Sed verwenden
Was ist, wenn Sie mit einem einzigen Sed-Befehl mehrere Zeilen löschen möchten, die mehreren Mustern entsprechen? Los geht's,
Syntax:
$ set -i '/PATTERN1/d;/PATTERN2/d' filename
$ sed -i '/SLURM_JOB_USER/d;/SLURM_SUBMIT_DIR/d' test.txt
Der obige Befehl löscht die Zeilen, die SLURM_JOB_USER
enthalten und SLURM_SUBMIT_DIR
Muster und speichern Sie die Datei. Beachten Sie das Semikolon (;) für die Eingabe mehrerer Muster innerhalb eines einzigen Befehls.
Muster ersetzen und mit Sed ausdrucken
Syntax:
$ sed 's/PATTERN/REPLACE_STRING/g' test.txt
$ sed 's/SLURM_JOB_USER/REPLACE1/g' test.txt
'g'
stellt global dar – es ersetzt alle Instanzen des Musters in jeder Zeile, anstatt nur das erste (was das Standardverhalten ist)
Muster ersetzen und die Datei mit Sed ändern
$ sed -i 's/SLURM_JOB_USER/REPLACE1/g' test.txt
Option '-i'
ändert die Datei.
Mit Sed mehrere Muster gleichzeitig verwenden
$ sed -i 's/SLURM_JOB_USER/REPLACE1/g;s/SLURM_SUBMIT_DIR/REPLACE2/g' test.txt
Achten Sie auf das Semikolon (;), um weitere Muster innerhalb des einzelnen Befehls hinzuzufügen.
Liebe es? Teilen Sie uns in den Kommentaren unten mit, wenn Sie eine Frage haben, und wir werden versuchen, sie hier zu behandeln.
Referenz