为了账号安全,请及时绑定邮箱和手机立即绑定

有条件查找和替换

有条件查找和替换

慕姐4208626 2023-07-11 17:15:49
我正在尝试在多个文件中执行条件查找和替换。文件的内容可以是,$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 录制来做到这一点,但是我必须逐一修改每个文件,并且我正在寻找一种更好的方法来一次完成此操作,针对多个文件
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

-E使用具有启用 ERE 选项的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);


查看完整回答
反对 回复 2023-07-11
?
jeck猫

TA贡献1909条经验 获得超7个赞

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);


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信