Depuis le langage de programmation Awk
La fonction
sub ( r, s , t )
trouve dabord la sous-chaîne la plus à gauche la plus longue correspondant à lexpression régulièrer
dans la chaîne ciblet
; il remplace ensuite la sous-chaîne par la chaîne de substitutions
.La fonction
sub(r,s)
est un synonyme desub(r,s,$0)
.In
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 fonction sub renvoie le nombre de substitutions effectuées.
Le retour de sub
est-il 0 ou 1? Est-il exact quil ne peut pas « y en avoir plusieurs, car sub
ne trouve que la première correspondance et la remplace?
Merci.
Réponse
Du 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. Certains les versions de awk permettent au troisième argument dêtre une expression qui nest pas une lvalue. Dans ce cas,sub()
recherche toujours le modèle et renvoie zéro ou un, mais le résultat la substitution (le cas échéant) est supprimée car il ny a pas de place pour la mettre. De telles versions de awk acceptent des expressions telles que:
sub(/USA/, "United States", "the USA and Canada")
Pour la compatibilité historique, gawk accepte ce code erroné. Cependant, lutilisation de tout autre objet non modifiable comme troisième paramètre provoque une erreur fatale et votre programme ne fonctionnera pas.
Donc, la réponse est dutiliser une variable:
awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana