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捕獲的部分放回替換部分中。

相關內容