Nehmen Sie mehrere Bearbeitungen mit einem einzigen Aufruf von sed vor

13

Ich versuche, sed zu verwenden, um eine Konfigurationsdatei zu bearbeiten. Es gibt ein paar Zeilen, die ich ändern möchte. Ich weiß, dass unter Linux sed -idirekte Änderungen möglich sind, aber Sie müssen diese in einer Sicherungsdatei speichern. Ich möchte jedoch vermeiden, dass mehrere Sicherungsdateien vorhanden sind, und alle meine Änderungen auf einmal vornehmen.

Gibt es eine Möglichkeit, dies zu tun, sed -ioder gibt es eine bessere Alternative?

rclark
quelle

Antworten:

20

Sie können festlegen sed, dass mehrere Vorgänge ausgeführt werden sollen, indem Sie einfach -e(oder) wiederholen-f wenn sich Ihr Skript in einer Datei befindet).

sed -i -e 's/a/b/g' -e 's/b/d/g' file nimmt beide Änderungen in der einzelnen Datei namens vor file In-Place vor. Ohne Sicherungsdatei.

sed -ibak -e 's/a/b/g' -e 's/b/d/g' filenimmt beide Änderungen in der einzelnen Datei namens fileIn-Place vor. Mit einer einzelnen Sicherungsdatei namens filebak.

EightBitTony
quelle
2
Beachten Sie, dass die Reihenfolge wichtig ist. Im Beispiel Befehl oben angegebenen, werden alle Instanzen des Briefes ain gedreht b, und dann alle Instanzen beingeschaltet sind in d. Sie können dasselbe tun, sed -i -e 's/a\|b/d/g' fileindem Sie alle Instanzen von entweder aoder bin drehend .
Wildcard
3

-eSie können nicht nur mehrere Optionen verwenden, sondern auch sed-Befehle mithilfe von Zeilenumbrüchen oder Semikolons in einem einzigen sed-Skript trennen.

Dies ist der Fall, unabhängig davon, ob das Skript einzeilig in der Befehlszeile oder eine Skriptdatei ist.

z.B

sed -e 's/a/b/g ; s/b/d/g' file

Die Leerzeichen um ;sind optional. Ich habe sie hier verwendet, um sicherzustellen, dass das Semikolon hervorgehoben wird (im Allgemeinen werden Leerzeichen zwischen Befehlen ignoriert, mit Ausnahme von Zeilenumbrüchen, die Befehle trennen) von Bedeutung).

oder:

sed -e 's/a/b/g
        s/b/d/g' file
cas
quelle
3

Eine andere Alternative ist exder Vorgänger von vi. Es ist eigentlich die POSIX-Tool der Wahl für die direkte Bearbeitung von Skriptdateien. Es ist außerordentlich flexibler sed -ials Perl und wahrscheinlich sogar portabler als Perl. (Wenn Sie sich außerhalb der Windows-Welt aufhalten , ist es zweifellos portabler als Perl.)

Es gibt einen Mangel an diesem relativen Stack von Beispiel Befehlen unter Verwendung von ex, zumindest im Vergleich mit der Fülle von Beispiel Befehlen sed, awkund Perl. Ich selbst habe mich jedoch eingehend mit den POSIX-Spezifikationen befasstex und seitdem die Trommel geschlagen. Ich habe viele Antworten geschrieben, indem ich exsowohl hier als auch auf dem vi / Vim-Stackexchange Folgendes verwendet habe:

Weitere Lektüre:

Platzhalter
quelle