Awk programozási nyelvből
A
sub ( r, s , t )
függvény először megtalálja ar
szabályos kifejezéssel illesztett leghosszabb hosszúságú részstruktúrát at
; ezután az alsztringet as
helyettesítő karakterlánccal helyettesíti.A
sub(r,s)
függvény asub(r,s,$0)
szinonimája.A
sub ( /ana/, "anda" , "banana" )
banana
helyébebandada
lép.
A sub ( r, s , t )
futtatása után hogyan kaphatom meg az új karakterláncot? Például a sub ( /ana/, "anda" , "banana" )
részben hogyan szerezhetem be az új karakterláncot bandada
?
Az alfunkció a végrehajtott helyettesítések számát adja vissza.
A sub
visszatérése 0 vagy 1? Helyes, hogy “nem lehet több, mint egy, mert a sub
csak az első mérkőzést találja meg és cserélje le?
Köszönöm.
Válasz
A GNU awk kézikönyvéből 9.1.3 Karakterlánc-manipulációs funkciók :
… a
sub()
harmadik argumentumának változónak, mezőnek vagy tömbelemnek kell lennie. Néhány Az awk verziói lehetővé teszik, hogy a harmadik argumentum olyan kifejezés legyen, amely nem érték. Ilyen esetben asub()
továbbra is a mintára keres, és nulla vagy egy értéket ad vissza, de a A helyettesítést (ha van) eldobják, mert nincs hova tenni. Az awk ilyen változatai elfogadják a következő kifejezéseket:
sub(/USA/, "United States", "the USA and Canada")
A múltbeli kompatibilitás érdekében a gawk elfogadja az ilyen hibás kódokat. Bármely más, nem cserélhető objektum használata harmadik paraméterként végzetes hibát okoz, és a program nem fog futni.
Tehát a válasz egy változó használata:
awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana