Overzicht
`gsub` staat voor Global Substitution en is een functie binnen `awk`-scripts die alle delen die overeenkomen met een specifieke reguliere expressie vervangt door een opgegeven tekenreeks. In tegenstelling tot de `sub`-functie, die slechts de eerste overeenkomst wijzigt, wijzigt `gsub` alle overeenkomsten.
gsub Functie Syntaxis
gsub(reguliere_expressie, vervangende_tekenreeks, [doel_tekenreeks])
- Reguliere expressie (regex): De reguliere expressie die het te zoeken patroon definieert.
- Vervangende tekenreeks (replacement): De tekenreeks waarmee het gevonden patroon wordt vervangen.
- Doel tekenreeks (target_string): De tekenreeks waarop de vervanging moet worden toegepast. Indien weggelaten, wordt deze toegepast op het gehele huidige record ($0).
Retourwaarde
De `gsub`-functie retourneert het aantal keren dat een vervanging heeft plaatsgevonden als een geheel getal. Deze retourwaarde kan nuttig zijn in voorwaardelijke uitspraken, enz.
Gebruiksvoorbeelden
Diverse voorbeelden van tekenreeksvervanging met de `gsub`-functie.
Vervang alle 'old' door 'new' in een bestand
echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt
Wijzigt alle voorkomens van het woord 'old' naar 'new' in het bestand data.txt. Geeft de gewijzigde inhoud weer.
Vervang spaties door koppeltekens
echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'
Wijzigt alle spaties in de invoertekst naar koppeltekens (-).
Vervang alleen binnen een specifiek veld
echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'
Wijzigt 'a' naar 'X' alleen binnen het derde veld ($3). (Bijv.: 'apple banana cat' -> 'apple banana cXt')
Vervang zonder hoofdlettergevoeligheid
echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'
Stelt de variabele `IGNORECASE` in op 1 om 'apple' te vervangen door 'orange' zonder hoofdlettergevoeligheid.
Verwijder alleen cijfers
echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'
Verwijdert alle cijfers uit de tekenreeks.
Tips & Aandachtspunten
Handige tips en aandachtspunten bij het gebruik van de `gsub`-functie.
Verschil met de sub-functie
`gsub` vervangt alle overeenkomsten, terwijl de `sub`-functie slechts de eerste overeenkomst vervangt. Kies de juiste functie op basis van uw behoeften.
- `gsub(regex, replacement, target)`: Vervangt alle overeenkomsten
- `sub(regex, replacement, target)`: Vervangt alleen de eerste overeenkomst
Speciale tekens in reguliere expressies
Om speciale tekens zoals `.` `*` `+` `?` `[` `]` `(` `)` `|` `^` `$` `\` letterlijk te gebruiken in een reguliere expressie, moet u ze escapen met `\`. Bijvoorbeeld, om een letterlijke punt (.) te zoeken, gebruikt u `\.`.
Aandacht bij het weglaten van de doel tekenreeks
Als de `target_string` wordt weggelaten, wordt de vervanging standaard toegepast op het gehele huidige record ($0). Om de vervanging alleen op specifieke velden toe te passen, moet u het veld expliciet specificeren met `gsub(regex, replacement, $N)`.
Backslash in de vervangende tekenreeks
De backslash (`\`) kan een speciale betekenis hebben in de vervangende tekenreeks. Bijvoorbeeld, `\&` vertegenwoordigt de gehele overeenkomende tekenreeks. Om een letterlijke backslash te gebruiken, moet u deze tweemaal escapen, zoals `\\`.