Este é o meu texto:
set $domain_name some-not-important-name.com;
Eu quero chegar a isso:
set $domain_name test.com;
Isto é o que eu tentei até agora:
DOMAIN_NAME=test.com
awk '{ sub(/ set $domain_name(.*)/, " set $domain_name $DOMAIN_NAME;") }1' file
resultado atual:
set $domain_name some-not-important-name.com
Atualização 1
A razão pela qual adicionei vários whitespaces
é que a linha pertence à nginx
configuração e possui vários espaços.
Como há ambos charset
e set
em meu arquivo e eles não são o primeiro caractere da linha, devo substituir set
por espaço antes.
ATUALIZAÇÃO: (mantém espaçamento)
Configurar:
Uma
awk
ideia:Premissas:
$3
não combina com as stringsset
nem$domain_name
$3
não contém espaço em brancoIsso gera:
Resposta original: (não mantém espaçamento)
Configurar:
Supondo que a linha de interesse tenha apenas os 3 campos delimitados por espaço ...
Uma
awk
ideia:Isso gera:
Usando qualquer POSIX awk:
Isso funcionará e manterá o espaçamento, não importa quais caracteres/strings estejam presentes na linha de entrada, incluindo metacaracteres regexp, referências inversas, substrings de campos anteriores, espaço em branco ou qualquer outra coisa.
Isso funcionaria
você tem que escapar do
$