Hvor får du den nye strengen etter å ha kjørt `sub` i awk

From The Awk Programming Language

Funksjonen sub ( r, s , t ) finner først lengst til lengste understreng matchet med det regulære uttrykket r i målstrengen t; den erstatter deretter substringen med substitusjonsstrengen s.

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

I sub ( /ana/, "anda" , "banana" ), for eksempel, banana erstattes med bandada.

Hvordan kan jeg få den nye strengen etter å ha kjørt sub ( r, s , t )? For eksempel, i sub ( /ana/, "anda" , "banana" ), hvordan kan jeg få den nye strengen bandada?

Underfunksjonen returnerer antall utskiftninger som er gjort.

Er retur av sub enten 0 eller 1? Er det riktig at det ikke kan være mer enn ett, fordi sub bare finner den første kampen og erstatter den?

Takk.

Svar

Fra GNU awk manualen 9.1.3 String-Manipulation Funksjoner :

… det tredje argumentet til sub() må være et variabel-, felt- eller array-element. Noen versjoner av awk tillater det tredje argumentet å være et uttrykk som ikke er en verdi. I et slikt tilfelle søker sub() fremdeles etter mønsteret og returnerer null eller ett, men resultatet av erstatning (hvis noen) kastes fordi det ikke er noe sted å si det. Slike versjoner av awk godtar uttrykk som følgende:

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

For historisk kompatibilitet godtar gawk en slik feilkode. Bruk av andre ikke-utskiftbare objekter som den tredje parameteren forårsaker en alvorlig feil, og programmet vil ikke kjøre.

Så, svaret er å bruke en variabel:

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *