我有这样的功能
Add(1,2);
Add(3,4);
需要替换为
Add({num1 : 1, num2 : 2});
Add({num1 : 3, num2 : 4});
这发生在多个文件的数百个地方,所以我想写一个可以为我做这个的脚本。
使用正则表达式我可以找到发生这种情况的地方
/Add\(.*\);/
但是我不确定如何用我需要的内容替换函数调用的内部。
我还不确定用于编写脚本的最佳语言。我打算用JavasScript在节点中编写它,但是如果有一个简单的解决方案,就会使用带有sed的Bash。
答案 0 :(得分:2)
您可以使用适当的字符串替换。
var regex= /(Add\()(\d+),(\d+)(\))/g,
replace = '$1{num1: $2, num2: $3}$4'
console.log('Add(3,4);'.replace(regex, replace));
答案 1 :(得分:1)
我会选择:
perl -i -pe 's/Add\((\d+),(\d+)\)/Add({num1 : $1, num2 : $2})/' filename
关于正则表达式,它不完整,/Add\((\d+),(\d+)\)/
将负责捕获指令并将第一个和第二个数字分别捕获到$1
和$2
。
标志的工作原理如下:
-i
进行就地编辑(这会重写您的文件;如果您对此不满意,请删除标记以查看输出或使用-i.bak
创建您的备份文件-p
解析每一行并在最后打印-e
(来自“eval”)是允许您运行单行而不是脚本的原因答案 2 :(得分:0)
试试这个sed方法
sed 's/\([^(]\+.\)\([^,]\+.\)\([^)]\+\)\(.*\)/\1{num1 : \2,num2 : \3}\4/g' FileName
答案 3 :(得分:0)
这应该适合你:
sed -i 's/Add(\([0-9]*\),\([0-9]*\))/Add({num1 : \1, num2 : \2})/' file
-i
选项用于编辑文件 。