Z programovacího jazyka Awk
Funkce
sub ( r, s , t )nejprve najde nejdelší
podřetězec nejvíce vlevo odpovídající regulárnímu výrazurv cílovém
řetězcit; pak nahradí podřetězec substitučním
řetězcems.Funkce
sub(r,s)je synonymem prosub(r,s,$0).V
sub ( /ana/, "anda" , "banana" ), napříkladbananaje
nahrazenobandada.
 Po spuštění sub ( r, s , t ) , jak mohu získat nový řetězec?
 Například v sub ( /ana/, "anda" , "banana" ) , jak mohu získat nový řetězec bandada ?
Funkce sub vrací počet provedených substitucí.
 Je návratem sub buď 0 nebo 1? Je správné, že nemůže být více než jeden, protože sub najít pouze první shodu a nahradit ji?
Děkuji.
Přijatá odpověď:
Z příručky GNU awk 9.1.3 Funkce manipulace s řetězci:
… třetí argument pro
sub()musí být prvek proměnné, pole nebo pole
. Některé verze awk umožňují, aby třetí argument byl výraz
, který není lvalue. V takovém případěsub()stále hledá
vzor a vrací nulu nebo jedničku, ale výsledek
substituce (pokud existuje) je zahozen, protože jej není kam vložit
. Takové verze awk přijímají výrazy jako následující:
sub(/USA/, "United States", "the USA and Canada")Kvůli historické
kompatibilitě gawk přijímá takový chybný kód. Použití jakéhokoli
jiného neměnného objektu jako třetího parametru však způsobí závažnou chybu
a váš program se nespustí.
Takže odpověď je použít proměnnou:
awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana