Hvor får man den nye streng efter at have kørt `sub` i awk

Fra Awk-programmeringssproget

Funktionen sub ( r, s , t ) finder først længst til venstre længst matchet med det regulære udtryk r i målstrengen t; det erstatter derefter understrengen med substitutionsstrengen s.

Funktionen sub(r,s) er et synonym for sub(r,s,$0).

I sub ( /ana/, "anda" , "banana" ) f.eks. erstattes banana med bandada.

Efter at have kørt sub ( r, s , t ), hvordan kan jeg få den nye streng? For eksempel i sub ( /ana/, "anda" , "banana" ) hvordan kan jeg få den nye streng bandada?

Underfunktionen returnerer antallet af udskiftninger.

Er returneringen af sub enten 0 eller 1? Er det korrekt, at det ikke kan være mere end en, fordi sub kun finder det første match og erstatter det?

Tak.

Svar

Fra GNU awk manual 9.1.3 Funktioner for strengmanipulation :

… det tredje argument til sub() skal være et variabel-, felt- eller array-element. Nogle versioner af awk tillader det tredje argument at være et udtryk, der ikke er en værdi. I et sådant tilfælde sub() søger stadig efter mønsteret og returnerer nul eller et, men resultatet af erstatning (hvis nogen) kastes, fordi der ikke er noget sted at sætte det. Sådanne versioner af awk accepterer udtryk som følgende:

sub(/USA/, "United States", "the USA and Canada")

For historisk kompatibilitet accepterer gawk en sådan fejlagtig kode. Brug af ethvert andet ikke-udskifteligt objekt som den tredje parameter medfører en fatal fejl, og dit program kører ikke.

= “9e1a869f5d”>

Så svaret er at bruge en variabel:

awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *