Você pode capturar a correspondência inteira, bem como o grupo de números, e especificar os dois na saída:
echo "param1='123'" | sed "s/\(param1='\([0-9]\+\)'\)/\nparam2=/g"
Eu tenho
param1='123'
Eu gostaria que
param1='123'
param2=123
onde 123 vai mudar entre os arquivos que eu gostaria de executar isso.
Eu posso obter o param2 usando sed -i "s/param1=\([0-9]\+\)/param2=''/g" '{}' \;
Mas então vou perder param1.
Eu também posso anexar a linha param2 usando sed -i "param1='\([0-9]\+\)';/a \param2=;
, mas o padrão não é reconhecido e acabo com param2=1
Existe uma maneira de combinar esses dois comandos, ou outra maneira de trabalhar isso?
Muito obrigado!
Aqui estão mais algumas opções:
Perl
echo "param1='123'" | perl -lpe 'print; s/(.+=).(\d+)./$1$2/'
awk
echo "param1='123'" | awk -F"[ =']" '{print $0"\n"$1"="$3}'
shell
echo "param1='123'" | while read l; do echo "$l"; echo "${l//\'/}"; done
Um sed
mais simples
echo "param1='123'" | sed "p;s/'//g"
Tags command-line regex sed linux