Ü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 `\\`.