Aperçu
`gsub` est l'abréviation de Global Substitution. C'est une fonction qui remplace toutes les parties d'un script `awk` correspondant à une expression régulière spécifiée par une chaîne donnée. Contrairement à la fonction `sub` qui ne remplace que la première correspondance, `gsub` remplace toutes les correspondances.
Syntaxe de la fonction gsub
gsub(expression_régulière, chaîne_de_remplacement, [chaîne_cible])
- Expression régulière (regex): L'expression régulière qui définit le motif à rechercher.
- Chaîne de remplacement (replacement): La chaîne qui remplacera le motif trouvé.
- Chaîne cible (target_string): La chaîne sur laquelle l'opération de remplacement sera effectuée. Si elle est omise, elle s'applique à l'ensemble de l'enregistrement courant ($0).
Valeur de retour
La fonction `gsub` renvoie le nombre de remplacements effectués sous forme d'entier. Cette valeur de retour peut être utile dans des conditions, par exemple.
Exemples d'utilisation
Divers exemples de substitution de chaînes utilisant la fonction `gsub`.
Remplacer toutes les occurrences de 'old' par 'new' dans un fichier
echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt
Modifie toutes les occurrences du mot 'old' en 'new' dans le fichier data.txt. Affiche le contenu modifié.
Remplacer les espaces par des tirets
echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'
Remplace tous les espaces dans la chaîne d'entrée par des tirets (-).
Remplacer uniquement dans un champ spécifique
echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'
Remplace 'a' par 'X' uniquement dans le troisième champ ($3). (Exemple : 'apple banana cat' -> 'apple banana cXt')
Remplacer sans distinction de casse
echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'
Définit la variable `IGNORECASE` à 1 pour remplacer 'apple' par 'orange' sans tenir compte de la casse.
Supprimer uniquement les chiffres
echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'
Supprime tous les chiffres de la chaîne.
Conseils et points d'attention
Conseils utiles et points à considérer lors de l'utilisation de la fonction `gsub`.
Différence avec la fonction sub
`gsub` remplace toutes les correspondances, tandis que la fonction `sub` ne remplace que la première correspondance. Choisissez la fonction appropriée selon vos besoins.
- `gsub(regex, replacement, target)` : Remplace toutes les correspondances
- `sub(regex, replacement, target)` : Remplace uniquement la première correspondance
Caractères spéciaux dans les expressions régulières
Pour utiliser des caractères spéciaux tels que `.`, `*`, `+`, `?`, `[`, `]`, `(`, `)`, `|`, `^`, `$`, `\` littéralement dans une expression régulière, vous devez les échapper avec `\`. Par exemple, pour rechercher un point littéral (`.`), utilisez `\.`.
Attention en cas d'omission de la chaîne cible
Si la `chaîne_cible` est omise, le remplacement s'applique par défaut à l'ensemble de l'enregistrement courant ($0). Pour l'appliquer uniquement à un champ spécifique, vous devez impérativement spécifier le champ sous la forme `gsub(regex, replacement, $N)`.
Antislash dans la chaîne de remplacement
Dans la chaîne de remplacement, l'antislash (`\`) peut avoir une signification spéciale. Par exemple, `\&` représente la chaîne entière correspondante. Pour utiliser un antislash littéral, vous devez l'échapper deux fois, par exemple avec `\\`.