Dove ottenere la nuova stringa dopo aver eseguito `sub` in awk

Dal linguaggio di programmazione Awk

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

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

In sub ( /ana/, "anda" , "banana" ), ad esempio, banana viene 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 sub restituisce il numero di sostituzioni effettuate.

Il ritorno di sub è 0 o 1? È corretto che “non può essere più di uno, perché sub trova solo la prima corrispondenza e la sostituisce?

Grazie.

Risposta

Dal manuale GNU awk 9.1.3 Funzioni di manipolazione delle stringhe :

… il terzo argomento di sub() deve essere un elemento variabile, campo o matrice. Alcuni versioni di awk consentono al terzo argomento di essere unespressione che non è un lvalue. In tal caso, sub() cerca ancora il pattern e restituisce zero o uno, ma il risultato del la sostituzione (se esiste) viene scartata perché non cè posto dove metterla. Tali versioni di awk accettano espressioni come le seguenti:

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

Per compatibilità storica, gawk accetta questo codice errato. Tuttavia, lutilizzo di qualsiasi altro oggetto non modificabile come terzo parametro causa un errore irreversibile e il programma non verrà eseguito.

Quindi, la risposta è utilizzare una variabile:

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *