bash 用通配符 sed/regnex 替换字符串中的文本

bash 用通配符 sed/regnex 替换字符串中的文本

我想知道这是否可能,我想批量替换各种文件中的文本,这不是问题。我无法弄清楚,或者即使有可能,也是以特定方式替换文本。

例如:

String = XXXXX_name($var1); 

XXXX是固定的,所以XXXX替换为例如YYYY,很简单。但更复杂的部分是:

($var1);

我想插入另一个变量,所以匹配将是");"<-- 在此之前插入,但是如果字符串已经有两个变量,($var1,$var2);则不插入任何内容。

现在要添加另一个东西,Var1和Var2可以被称为不同的东西,所以匹配必须if $ > 1在里面()然后不做任何事情,If $ = 1 inside ()然后插入", $var2"之前);

字符串=XXXXX_name($var1);
应该变成:字符串=YYYYY_name($var1, var2);

答案1

像这样的东西吗?

$ echo 'String = XXXXX_name($var1); ' | 
    sed -E -e 's/XXXXX_name\((\$[[:alnum:]_]+)\);/YYYYY_name\(\1, \$var2\);/'
String = YYYYY_name($var1, $var2); 

在扩展正则表达式中,不带引号的括号捕获其中的部分,并且 sed 将\1捕获的部分放回到替换部分中。

相关内容