Eu tenho uma string como:
schedule="0.25"
e eu quero substituir o 0.25
digamos por0.50
Eu poderia conseguir isso com:
sed 's/\"....\"/\"0\.50\"/g'
o problema é que não sei o valor entre aspas duplas e, portanto, não sei o comprimento. Pode ser qualquer valor, mas sempre será precedido por schedule=
.
Você pode usar
[^"]*
para corresponder a uma sequência de zero ou mais não"
caracteres. EntãoParece que você só quer substituir o que vem depois do sinal de igual por
"0.50"
. Isso é feito facilmente comawk
:O
awk
programa procura especificamente um registro cujo primeiro=
campo delimitado sejaschedule
. Quando encontrado, ele substitui o segundo campo por"0.50"
.Se
0.50
for variável, você pode passar esse valor para oawk
script assim:E obviamente, se
schedule
pode variar também,Com
sed
, você pode simplesmente ignorar o que vem depois=
e substituí-lo pelo que desejar:Para garantir que substituímos apenas o valor de
schedule
, e não o valor de alguma outra configuração,Isso coloca uma condição em nossa substituição; A linha deve ter a string
schedule=
no início dela para ser acionada.Poderíamos até inserir variáveis de shell em nossa
sed
expressão, mas saiba que devemos nos certificar de que os valores dessas variáveis não quebrem ased
sintaxe (por conter caracteres que afetam a correspondência ou a delimitação dos comandos):Ao contrário do
awk
exemplo, aqui contamos com o shell para injetar os valores de nossas variáveis nosed
script de edição. Isso normalmente seria classificado como uma vulnerabilidade de injeção de código nos casos em que os valores das variáveis não estão sob nosso controle (como quando os estamos lendo de uma fonte fornecida pelo usuário).Se você estiver invocando o sed/awk de um script/terminal bash, poderá evitar o uso de ferramentas externas e aproveitar os recursos de processamento de string do próprio bash: