Din Limbajul de programare Awk
Funcția
sub ( r, s , t )
găsește mai întâi cel mai lung substring din stânga potrivit cu expresia regulatăr
din șirul țintăt
; apoi înlocuiește șirul de caractere cu șirul de substituțies
.Funcția
sub(r,s)
este un sinonim pentrusub(r,s,$0)
.În
sub ( /ana/, "anda" , "banana" )
, de exemplu,banana
este înlocuit cubandada
.
După executarea sub ( r, s , t )
, cum pot obține noul șir? De exemplu, în sub ( /ana/, "anda" , "banana" )
, cum pot obține noul șir bandada
?
Funcția secundară returnează numărul de substituții efectuate.
Întoarcerea sub
este 0 sau 1? Este corect că nu poate fi mai mult de unul, deoarece sub
găsește prima potrivire și o înlocuiește?
Mulțumesc.
Răspuns
Din manualul GNU awk 9.1.3 Funcții de manipulare a șirurilor :
… al treilea argument pentru
sub()
trebuie să fie o variabilă, un câmp sau un element matrice. Unele versiunile awk permit ca al treilea argument să fie o expresie care nu este o valoare. Într-un astfel de caz,sub()
încă caută modelul și returnează zero sau unul, dar rezultatul substituția (dacă există) este aruncată pentru că nu există unde să o puneți. Astfel de versiuni ale awk acceptă expresii precum următoarele:
sub(/USA/, "United States", "the USA and Canada")
Pentru compatibilitatea istorică, gawk acceptă un astfel de cod eronat. Cu toate acestea, utilizarea oricărui alt obiect care nu poate fi schimbat ca al treilea parametru provoacă o eroare fatală, iar programul dvs. nu va rula.
Deci, răspunsul este să folosiți o variabilă:
awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana