3

я имею

param1='123'

мне бы хотелось

param1='123'
param2=123 

где 123 будет меняться между файлами, на которых я хотел бы запустить это.

Я могу получить param2 используя sed -i "s/param1=\([0-9]\+\)/param2='\1'/g" '{}' \; Но тогда я потеряю param1.

Я также могу добавить строку param2, используя sed -i "param1='\([0-9]\+\)';/a \param2=\1; но шаблон не распознается, и в итоге я param2=1

Есть ли способ объединить эти две команды или другой способ работы?

Большое спасибо!

2 ответа2

4

Вы можете захватить все совпадение, а также группу номеров, а затем указать оба в выходных данных:

echo "param1='123'" | sed "s/\(param1='\([0-9]\+\)'\)/\1\nparam2=\2/g"
4

Вот еще несколько вариантов:

  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. ракушка

    echo "param1='123'" | while read l; do echo "$l"; echo "${l//\'/}"; done
    
  4. Более простой sed

    echo "param1='123'" | sed "p;s/'//g"
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .