GNU/Linux >> Linux Esercitazione >  >> Linux

Dove ottenere la nuova stringa dopo aver eseguito `sub` in Awk?

Dal linguaggio di programmazione Awk

La funzione sub ( r, s , t ) prima trova la sottostringa
più a sinistra più lunga che corrisponde all'espressione regolare r nella stringa di destinazione
t; quindi sostituisce la sottostringa con la stringa di sostituzione
s .

La funzione sub(r,s) è sinonimo di sub(r,s,$0) .

In sub ( /ana/, "anda" , "banana" ) , ad esempio, banana è
sostituito con bandada .

Dopo aver eseguito sub ( r, s , t ) , come posso ottenere la nuova stringa?
Ad esempio, in sub ( /ana/, "anda" , "banana" ) , come posso ottenere la nuova stringa bandada ?

La funzione secondaria restituisce il numero di sostituzioni effettuate.

È il ritorno di sub o 0 o 1? È corretto che non possa essere più di uno, perché sub trovare solo la prima corrispondenza e sostituirla?

Grazie.

Risposta accettata:

Dal manuale GNU awk 9.1.3 Funzioni di manipolazione delle stringhe:

… il terzo argomento di sub() deve essere un elemento variabile, campo o array
. Alcune versioni di awk consentono al terzo argomento di essere un'espressione
che non è un lvalue. In tal caso, sub() cerca ancora
il pattern e restituisce zero o uno, ma il risultato della sostituzione
(se presente) viene eliminato perché non c'è posto per inserirlo
. Tali versioni di awk accettano espressioni come la seguente:

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

Per compatibilità storica
, gawk accetta tale codice errato. Tuttavia, l'utilizzo di qualsiasi
altro oggetto non modificabile come terzo parametro provoca un errore irreversibile
e il programma non verrà eseguito.

Quindi, la risposta è usare una variabile:

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

Linux
  1. Dove viene impostato il termine Default della variabile di ambiente?

  2. Linux:come ottenere l'ora dell'orologio da parete di un processo in esecuzione?

  3. Ottieni il complemento del risultato di un comando Ls?

  4. Come risolvere il problema "Firefox già in esecuzione" su Linux

  5. Dov'è la funzione itoa in Linux?

Linux:dove viene effettivamente memorizzata la stringa dell'ambiente?

Come posso ottenere l'ultimo numero dalla stringa in bash?

Dov'è il comando gem in RHEL6?

Dov'è il fork() sulla fork bomb :(){ :|:&};:?

Impossibile ottenere l'accesso SSH per un nuovo utente

dove si trova il database aggiornatob?