GNU/Linux >> Znalost Linux >  >> Linux

Kde získat nový řetězec po spuštění `sub` v Awk?

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ýrazu r v cílovém
řetězci t; pak nahradí podřetězec substitučním
řetězcem s .

Funkce sub(r,s) je synonymem pro sub(r,s,$0) .

V sub ( /ana/, "anda" , "banana" ) , například banana je
nahrazeno bandada .

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

Linux
  1. Linux – jak získat čas nástěnných hodin běžícího procesu?

  2. Jak opravit problém „Firefox již běží“ v systému Linux

  3. Kde najdu Java SDK v Linuxu po jeho instalaci?

  1. Jak mohu získat poslední číslo z řetězce v bash?

  2. Jak získat n-tý řádek po grepovaném řádku?

  3. po instalaci monitu, když udělám monit status myproc, zobrazí se chyba při připojení k démonu monit

  1. 4 způsoby, jak udržet příkaz spuštěný poté, co se odhlásíte z relace SSH

  2. Nelze získat přístup SSH pro nového uživatele

  3. kde se nachází databáze updatedb?