Awk programozási nyelvből
A
sub ( r, s , t )függvény először megtalálja arszabályos kifejezéssel illesztett leghosszabb hosszúságú részstruktúrát at; ezután az alsztringet ashelyettesítő karakterlánccal helyettesíti.A
sub(r,s)függvény asub(r,s,$0)szinonimája.A
sub ( /ana/, "anda" , "banana" )bananahelyébebandadalé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