Startseite > Textverarbeitung & Suche > awk-gsub

awk-gsub: Globale Zeichenersetzung

Die `gsub`-Funktion, die innerhalb des `awk`-Befehls verwendet wird, dient dazu, alle Zeichenfolgen, die einem bestimmten regulären Ausdruck entsprechen, global durch eine andere Zeichenfolge zu ersetzen. Dies ist äußerst nützlich, um Muster, die mehrmals in Dateiinhalten oder Streams vorkommen, auf einmal zu ändern.

Übersicht

`gsub` steht für Global Substitution und ist eine Funktion innerhalb von `awk`-Skripten, die alle Teile, die einem bestimmten regulären Ausdruck entsprechen, durch eine angegebene Zeichenfolge ersetzt. Im Gegensatz zur `sub`-Funktion, die nur das erste übereinstimmende Element ersetzt, ersetzt `gsub` alle übereinstimmenden Elemente.

Syntax der gsub-Funktion

gsub(regulärer_ausdruck, ersetzungszeichenfolge, [zielzeichenfolge])

  • Regulärer Ausdruck (regex): Ein regulärer Ausdruck, der das zu suchende Muster definiert.
  • Ersetzungszeichenfolge (replacement): Die Zeichenfolge, durch die das gefundene Muster ersetzt werden soll.
  • Zielzeichenfolge (target_string): Die Zeichenfolge, auf die der Ersetzungsvorgang angewendet werden soll. Wenn dies weggelassen wird, wird der gesamte aktuelle Datensatz ($0) verwendet.

Rückgabewert

Die `gsub`-Funktion gibt die Anzahl der durchgeführten Ersetzungen als ganze Zahl zurück. Dieser Rückgabewert kann in bedingten Anweisungen nützlich sein.

Anwendungsbeispiele

Verschiedene Beispiele für die Zeichenfolgenersetzung mit der `gsub`-Funktion.

Alle 'old' in einer Datei durch 'new' ersetzen

echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt

Alle Vorkommen des Wortes 'old' in der Datei data.txt werden durch 'new' ersetzt. Die geänderten Inhalte werden ausgegeben.

Leerzeichen durch Bindestriche ersetzen

echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'

Alle Leerzeichen in der eingegebenen Zeichenfolge werden durch Bindestriche (-) ersetzt.

Nur innerhalb eines bestimmten Feldes ersetzen

echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'

Nur innerhalb des dritten Feldes ($3) wird 'a' durch 'X' ersetzt. (Beispiel: 'apple banana cat' -> 'apple banana cXt')

Ersetzen ohne Berücksichtigung von Groß- und Kleinschreibung

echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'

Durch Setzen der Variablen `IGNORECASE` auf 1 wird 'apple' durch 'orange' ersetzt, ohne zwischen Groß- und Kleinschreibung zu unterscheiden.

Nur Zahlen entfernen

echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'

Alle Zahlen in der Zeichenfolge werden entfernt.

Tipps & Hinweise

Nützliche Tipps und zu beachtende Punkte bei der Verwendung der `gsub`-Funktion.

Unterschied zur sub-Funktion

`gsub` ersetzt alle übereinstimmenden Elemente, während die `sub`-Funktion nur das erste übereinstimmende Element ersetzt. Wählen Sie die entsprechende Funktion je nach Bedarf.

  • `gsub(regex, replacement, target)`: Ersetzt alle übereinstimmenden Elemente
  • `sub(regex, replacement, target)`: Ersetzt nur das erste übereinstimmende Element

Sonderzeichen in regulären Ausdrücken

Um Sonderzeichen wie `.`, `*`, `+`, `?`, `[`, `]`, `(`, `)`, `|`, `^`, `$`, `\` in einem regulären Ausdruck als Literale zu verwenden, müssen sie mit `\` maskiert werden. Um beispielsweise einen tatsächlichen Punkt (`.`) zu finden, verwenden Sie `\.`.

Vorsicht bei Weglassen der Zielzeichenfolge

Wenn die `target_string` weggelassen wird, wird der Ersetzungsvorgang standardmäßig auf den gesamten aktuellen Datensatz ($0) angewendet. Um die Ersetzung nur auf ein bestimmtes Feld anzuwenden, müssen Sie unbedingt das Feld in der Form `gsub(regex, replacement, $N)` angeben.

Backslash in der Ersetzungszeichenfolge

Der Backslash (`\`) in der Ersetzungszeichenfolge kann eine besondere Bedeutung haben. Zum Beispiel steht `\&` für die gesamte übereinstimmende Zeichenfolge. Um einen literalen Backslash zu verwenden, müssen Sie ihn zweimal maskieren, z. B. mit `\\`.


Gleiche Kategorie Befehle