有条件查找和替换

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


$value$plusargs("DEC_ARG=%0d", val1);

$value$plusargs("HEX_ARG=%h", val2);

$value$plusargs("STRING_ARG=%s", val3);

这里我想替换$value$plusargs为get_dvalue_argsif there's %0d、 by get_hvalue_argsif%h等等。


期望的输出是,


get_dvalue_arg("DEC_ARG", val1);

get_hvalue_arg("HEX_ARG", val2);

get_svalue_arg("STRING_ARG", val3);

我尝试过下面的“awk”命令,但它用 get_dvalue_arg 替换所有行,


awk '/=%0d/&&/$plusargs/{sub("$value$plusargs","get_dvalue_args")}1'

我也尝试了下面的“sed”命令,但结果相同,


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

请注意,我可以通过 vim 录制来做到这一点,但是我必须逐一修改每个文件,并且我正在寻找一种更好的方法来一次完成此操作,针对多个文件


慕姐4208626
浏览 113回答 2
2回答

繁花不似锦

-E使用具有启用 ERE 选项的sed ,例如 GNU 或 OSX/BSD sed:$ sed -E 's/\$(value)\$plus(args\("[^=]+)=%0?(.)/get_\3\1_\2/' fileget_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/' fileget_dvalue_args("DEC_ARG", val1);get_hvalue_args("HEX_ARG", val2);get_svalue_args("STRING_ARG", val3);

jeck猫

Perl 1 衬垫perl -pne "s/\$value\$plusargs(\(\"[A-Z_]+)=%\d?([a-z])/get_$2value_arg$1/;" data_file输入$value$plusargs("DEC_ARG=%0d", val1);$value$plusargs("HEX_ARG=%h", val2);$value$plusargs("STRING_ARG=%s", val3);输出get_dvalue_arg("DEC_ARG", val1);get_hvalue_arg("HEX_ARG", val2);get_svalue_arg("STRING_ARG", val3);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python