À partir du langage de programmation Awk
La fonction
sub ( r, s , t )
trouve d'abord la sous-chaîne
la plus longue à l'extrême gauche correspondant à l'expression régulièrer
dans la chaîne
ciblet
; il remplace alors la sous-chaîne par la chaîne de substitution
s
.La fonction
sub(r,s)
est synonyme desub(r,s,$0)
.Dans
sub ( /ana/, "anda" , "banana" )
, par exemple,banana
est
remplacé parbandada
.
Après avoir exécuté sub ( r, s , t )
, comment puis-je obtenir la nouvelle chaîne ?
Par exemple, dans sub ( /ana/, "anda" , "banana" )
, comment puis-je obtenir la nouvelle chaîne bandada
?
La sous-fonction renvoie le nombre de substitutions effectuées.
Est le retour de sub
soit 0 soit 1 ? Est-il exact qu'il ne peut pas y en avoir plus d'un, car sub
ne trouver que la première correspondance et la remplacer ?
Merci.
Réponse acceptée :
D'après le manuel GNU awk 9.1.3 Fonctions de manipulation de chaînes :
… le troisième argument de
sub()
doit être une variable, un champ ou un élément de tableau
. Certaines versions de awk permettent au troisième argument d'être une
expression qui n'est pas une lvalue. Dans un tel cas,sub()
recherche toujours
le modèle et renvoie zéro ou un, mais le résultat de la
substitution (le cas échéant) est rejeté car il n'y a pas de place pour le mettre
. Ces versions d'awk acceptent des expressions telles que :
sub(/USA/, "United States", "the USA and Canada")
Pour des raisons de
compatibilité historique, gawk accepte ce code erroné. Cependant, l'utilisation de tout
autre objet non modifiable comme troisième paramètre provoque une erreur fatale
et votre programme ne s'exécutera pas.
Donc, la réponse est d'utiliser une variable :
awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana