GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

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

Dans 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 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

Linux
  1. Linux - Comment obtenir l'heure de l'horloge murale d'un processus en cours d'exécution ?

  2. Comment résoudre le problème "Firefox déjà en cours d'exécution" sous Linux

  3. Comment puis-je obtenir le dossier temporaire d'une machine exécutant maven?

  4. Où est la commande gem dans RHEL6 ?

  5. où se trouve la base de données mise à jour ?

4 façons de maintenir une commande en cours d'exécution après la déconnexion de la session SSH

Linux - Où la chaîne d'environnement est-elle réellement stockée ?

après avoir installé monit quand je fais monit status myproc j'obtiens une erreur de connexion au démon monit

Où est le fork() sur la bombe fork :(){ :|:&};: ?

Comment puis-je obtenir l'heure de l'horloge murale d'un processus en cours d'exécution ?

Impossible d'obtenir l'accès SSH pour un nouvel utilisateur