Startpagina > Tekstverwerking en zoeken > awk-gsub

awk-gsub: Globale tekstvervanging

De `gsub`-functie binnen het `awk`-commando wordt gebruikt om alle overeenkomsten met een specifieke reguliere expressie globaal te vervangen door een andere tekenreeks. Dit is erg handig voor het in bulk wijzigen van patronen die meerdere keren voorkomen in bestandsinhoud of streams.

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


Hétzelfde categoriecommando