Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 条件查找和替换_Python_Perl_Sed_Replace - Fatal编程技术网

Python 条件查找和替换

Python 条件查找和替换,python,perl,sed,replace,Python,Perl,Sed,Replace,我正在尝试在多个文件中执行条件查找和替换。文件的内容可能是 $value$plusargs("DEC_ARG=%0d", val1); $value$plusargs("HEX_ARG=%h", val2); $value$plusargs("STRING_ARG=%s", val3); 这里我想用get\u dvalue\u args替换$value$plusargs如果有%0d,用get\u hvalue\u args如果%h等等

我正在尝试在多个文件中执行条件查找和替换。文件的内容可能是

$value$plusargs("DEC_ARG=%0d", val1);
$value$plusargs("HEX_ARG=%h", val2);
$value$plusargs("STRING_ARG=%s", val3);
这里我想用
get\u dvalue\u args
替换
$value$plusargs
如果有
%0d
,用
get\u hvalue\u args
如果
%h
等等

期望输出为

get_dvalue_arg("DEC_ARG", val1);
get_hvalue_arg("HEX_ARG", val2);
get_svalue_arg("STRING_ARG", val3);
get_dvalue_arg("DEC_ARG", val1);
get_hvalue_arg("HEX_ARG", val2);
get_svalue_arg("STRING_ARG", val3);
我尝试了下面的“awk”命令,但它用get\u dvalue\u arg替换了所有行

awk '/=%0d/&&/$plusargs/{sub("$value$plusargs","get_dvalue_args")}1'
我也尝试了下面的“sed”命令,但结果相同

sed -i '/=%0d/{s/$value$plusargs/get_dvalue_args/}'

注:我可以通过vim录制来实现这一点,但我必须一个接一个地修改每个文件,我正在寻找一种更好的方法,通过一个sed(具有启用ERE的
-E
选项,例如GNU或OSX/BSD sed)瞄准多个文件:

$ sed -E 's/\$(value)\$plus(args\("[^=]+)=%0?(.)/get_\3\1_\2/' file
get_dvalue_args("DEC_ARG", val1);
get_hvalue_args("HEX_ARG", val2);
get_svalue_args("STRING_ARG", val3);
对于任何POSIX sed:

$ sed 's/\$\(value\)\$plus\(args("[^=]\{1,\}\)=%0\{0,1\}\(.\)/get_\3\1_\2/' file
get_dvalue_args("DEC_ARG", val1);
get_hvalue_args("HEX_ARG", val2);
get_svalue_args("STRING_ARG", val3);

使用具有启用ERE的
-E
选项的sed,例如GNU或OSX/BSD sed:

$ sed -E 's/\$(value)\$plus(args\("[^=]+)=%0?(.)/get_\3\1_\2/' file
get_dvalue_args("DEC_ARG", val1);
get_hvalue_args("HEX_ARG", val2);
get_svalue_args("STRING_ARG", val3);
对于任何POSIX sed:

$ sed 's/\$\(value\)\$plus\(args("[^=]\{1,\}\)=%0\{0,1\}\(.\)/get_\3\1_\2/' file
get_dvalue_args("DEC_ARG", val1);
get_hvalue_args("HEX_ARG", val2);
get_svalue_args("STRING_ARG", val3);
Perl oneliner

perl -pne "s/\$value\$plusargs(\(\"[A-Z_]+)=%\d?([a-z])/get_$2value_arg$1/;" data_file
输入

输出

Perl oneliner

perl -pne "s/\$value\$plusargs(\(\"[A-Z_]+)=%\d?([a-z])/get_$2value_arg$1/;" data_file
输入

输出