Onde obter a nova string depois de executar 'sub' no awk

0

Da linguagem de programação Awk

The function sub ( r, s , t ) first finds the leftmost longest substring matched by the regular expression r in the target string t; it then replaces the substring by the substitution string s.

The function sub(r,s) is a synonym for sub(r,s,$0).

In sub ( /ana/, "anda" , "banana" ), for example, banana is replaced with bandada.

Depois de executar sub ( r, s , t ) , como posso obter a nova string? Por exemplo, em sub ( /ana/, "anda" , "banana" ) , como posso obter a nova string bandada ?

The sub function returns the number of substitutions made.

O retorno de sub é 0 ou 1? É correto que não possa ser mais do que um, porque sub apenas encontra a primeira correspondência e a substitui?

Obrigado.

    
por Tim 17.07.2017 / 02:58

1 resposta

2

Do manual do GNU awk 9.1.3 Funções de manipulação de seqüências :

... the third argument to sub() must be a variable, field, or array element. Some versions of awk allow the third argument to be an expression that is not an lvalue. In such a case, sub() still searches for the pattern and returns zero or one, but the result of the substitution (if any) is thrown away because there is no place to put it. Such versions of awk accept expressions like the following:

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

For historical compatibility, gawk accepts such erroneous code. However, using any other nonchangeable object as the third parameter causes a fatal error and your program will not run.

Então, a resposta é usar uma variável:

awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana
    
por 17.07.2017 / 03:05

Tags