grep -Hrl DataLogger /testFolder/ | xargs sed /,$/{N -e"s|DataLogger::copyStringLength(\(dl.[a-zA-Z0-9]\+\)..\(.\+\)(.c_str()\)\+\(,\s*.*;)|IDataLogger::copyString(\2, \1);|g"}
我正在使用上面的脚本将方法调用从DataLogger::copyStringLength(dest, source, length)
更改为IDataLogger::copyString(source, dest)
。
上面的整个脚本似乎按照我的意愿去做,并且无论方法调用中的换行如何都在替换。但就像现在一样,我只打印到控制台,而不是在文件中就地打印。我已经尝试在sed调用中的几个地方放置-i选项,它总是会返回错误。
任何反馈都将不胜感激。
对于那些对于换行的原因和位置感到好奇的人来说,这种方法有3种不同的格式(取决于变量名的长度)
copyStringLength(varA, varB, varC);
copyStringLength(varA, varB,
varC);
copyStringLength(varA,
varB,
varC);
答案 0 :(得分:0)
我看不出你的sed
命令在你的问题中是如何工作的(可能是原始剧本副本中的错误)。
无论如何,从您的代码我可以得到两个假设:
,
(字符串,称为函数等)那就是说,命令行是:
grep -rl DataLogger /testFolder/ | xargs sed -i \
-e '/,\s*$/N;/,\s*$/N' \
-e 's/\(DataLogger::copyString\)Length(\s*\([^,]\+\)\s*,\s*\([^,]\+\)\s*,.*);/I\1(\3, \2);/g'
<强>解释强>
-H
中,-l
与-r
(递归)选项等效(打印文件名)。-i
编辑文件(无备份)-e
将以,
结尾的前两行加入下一行(忽略尾随空格)-e
切换前两个参数,不包括第三个参数以及它们之间的任何空格。假设文件名中没有空格,或者sed
将失败,它将起作用。