Encontre e substitua com sed, mantenha a linha original também

3

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!

    
por user1792403 19.12.2013 / 13:31

2 respostas

4

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"
    
por 19.12.2013 / 13:53
4

Aqui estão mais algumas opções:

  1. Perl

    echo "param1='123'" | perl -lpe 'print; s/(.+=).(\d+)./$1$2/'
    
  2. awk

    echo "param1='123'" | awk -F"[ =']" '{print $0"\n"$1"="$3}'
    
  3. shell

    echo "param1='123'" | while read l; do echo "$l"; echo "${l//\'/}"; done
    
  4. Um sed mais simples

    echo "param1='123'" | sed "p;s/'//g"
    
por 06.01.2014 / 11:58