![encontre e substitua um valor em uma linha de texto](https://rvso.com/image/36014/encontre%20e%20substitua%20um%20valor%20em%20uma%20linha%20de%20texto.png)
Eu tenho um arquivo de texto que contém apenas 1 linha de texto
1314:Battery:1.90:50:30
Estou tentando descobrir se existe alguma maneira de fazer um grep
e sed
alterar o valor 50 e 30 para o seguinte
1314:Battery:1.90:45:35
que eu reduziria 5 de 50 e aumentaria 5 de 30.
Por favor, me oriente se existe uma maneira melhor de resolver esse problema? Acabei de começar a pegar esse script. Obrigado =)
Responder1
awk -F":" '{OFS=":"; print $1,$2,$3,$4-5,$5+5}' filename
Saída:
1314: Bateria: 1,90:45:35
Responder2
Com perl
:
perl -i -F: -lape '$F[3]-=5;$F[4]+=5;$_=join ":",@F' the-file
Com sh
(assumindo que esses números são sempre inteiros decimais sem zeros à esquerda):
IFS=: read -r a b c d e < the-file &&
printf '%s\n' "$a:$b:$c:$((d-5)):$((e+5))" > the-file
Com versões recentes do GNU awk
:
gawk -i /usr/share/awk/inplace.awk -F: -vOFS=: '{$4-=5;$5+=5}1' the-file
Não use-i inplace
as gawk
tenta carregar primeiro a inplace
extensão (como inplace
ou inplace.awk
) do diretório de trabalho atual, onde alguém poderia ter plantado malware. O caminho da inplace
extensão fornecida gawk
pode variar de acordo com o sistema, consulte a saída degawk 'BEGIN{print ENVIRON["AWKPATH"]}'