Où obtenir la nouvelle chaîne après avoir exécuté `sub` dans awk

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ère r dans la chaîne cible t; il remplace ensuite la sous-chaîne par la chaîne de substitution s.

La fonction sub(r,s) est un synonyme de sub(r,s,$0).

In sub ( /ana/, "anda" , "banana" ), par exemple, banana est remplacé par bandada.

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 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *