![bash 用通配符 sed/regnex 替换字符串中的文本](https://linux22.com/image/197649/bash%20%E7%94%A8%E9%80%9A%E9%85%8D%E7%AC%A6%20sed%2Fregnex%20%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC.png)
我想知道这是否可能,我想批量替换各种文件中的文本,这不是问题。我无法弄清楚,或者即使有可能,也是以特定方式替换文本。
例如:
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
捕获的部分放回到替换部分中。