用 sed 查找并替换,保留原始行

用 sed 查找并替换,保留原始行

我有

param1='123'

我想

param1='123'
param2=123 

其中 123 将在我想要运行这个文件的文件之间发生变化。

我可以使用获取 param2sed -i "s/param1=\([0-9]\+\)/param2='\1'/g" '{}' \; 但是然后我会丢失 param1。

我也可以使用附加行 param2 sed -i "param1='\([0-9]\+\)';/a \param2=\1;,但模式无法识别,最终我得到param2=1

有没有办法将这两个命令结合起来,或者用另一种方法来实现这一点?

非常感谢!

答案1

您可以捕获整个匹配以及数字组,然后在输出中指定两者:

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

答案2

这里还有一些选项:

  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"
    

相关内容