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
输入
输出