Alguém pode me explicar por que o sub () / gsub () do awk funciona assim?

Kent:

Eu sei que awkpode fazer substituição de texto / string com sub()e gsub()como:

kent$ echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb

ou

kent$ echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb

No entanto, hoje cometi um erro de digitação, escrevi a linha como:

kent$ echo "fffff"|awk '{gsub('f', "b")}1'

Mas awknão reclamei disso, mas gerou uma saída como de costume, é claro, uma saída inesperada, levei algum tempo para descobrir o erro. A saída que awkme deu foi:

bfbfbfbfbfb

outro exemplo:

kent$ echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB

exemplo com também sub()é estranho:

kent$  echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance

Alguém poderia me explicar como foi feita a estranha substituição?

kent$  awk --version
GNU Awk 4.0.2

EDITAR

obrigado pela resposta de Joni. talvez este exemplo explique melhor, eu apenas adiciono aqui:

kent$  echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance

kent$  echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2:        ^ unexpected newline or end of string
Joni:

Quando você escreve

echo "fffff"|awk '{gsub('f', "b")}1'

o que awk vê é {gsub(f, "b")}1. Ele interpreta fcomo uma variável, com um valor vazio, e substitui cada string vazia na entrada por b.

A cadeia vazia é encontrada entre cada caractere e após o último, então o awk insere um bapós cada f.

Você pode substituir //ou ""pelo mesmo efeito, sem uma variável não utilizada:

echo "fffff"|awk '{gsub(//, "b")}1'            # fbfbfbfbfb

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Alguém pode explicar por que isso não funciona?

Alguém pode me explicar por que esse código não funciona?

Alguém pode me explicar por que esse código lisp não funciona?

Alguém pode explicar por que esse código if/else do brainfuck não funciona?

Alguém pode me explicar por que o método de ligação não funciona nesses exemplos

Alguém pode explicar, por que minha classificação não funciona corretamente?

Alguém pode me explicar como funciona essa função?

Alguém pode me explicar como essa solução funciona

Alguém pode me explicar por que esse segundo método não atualiza totalmente a string?

Javascript: objetos e funções ... Alguém pode explicar por que isso não funciona?

JavaScript: alguém pode fazer isso funcionar ou explicar por que não funciona?

Alguém pode me explicar como o escopo do operador lógico "OU" funciona em Javascript?

Alguém pode me explicar o que o stty faz?

alguém pode me explicar por que as seguintes funções de duas setas são equivalentes?

Por que a elevação está errada para minhas coordenadas, alguém pode me explicar

Alguém pode me explicar por que não consigo retornar um ponteiro inteligente?

Alguém pode me explicar brevemente o que é std :: streampos?

Alguém pode explicar por que minha configuração do Carbon não está retendo dados?

Alguém pode explicar por que set está se comportando assim com booleano nele?

Por que essa afirmação é falsa? Alguém pode explicar

Alguém pode me explicar esta consulta LINQ em detalhes, que apliquei no projeto do SharePoint? Por que o objeto P é usado?

Alguém pode explicar por que esse código não funciona da maneira que eu quero?

Alguém pode explicar por que um trecho de código funciona da mesma forma que o meu?

Alguém pode me explicar o StandardScaler?

Alguém pode me explicar por que a var 'health' não é atualizada ao chamar a função updateGame ()

Alguém pode explicar o que é maxBit?

Alguém pode me explicar por que há uma borda de fundo nos itens do meu menu?

Alguém pode me explicar por que há uma borda de fundo nos itens do meu menu?

Alguém pode me explicar por que a impressão apenas da string s4 é 10bab?