【发布时间】:2021-01-11 04:17:20
【问题描述】:
我想查找并用square(var) 替换当前目录的C++ 文件中出现的所有形式的pow(var,2)。
我正在查看https://regexr.com/,但我仍然不确定如何将var 描述为正则表达式。复杂之处在于var 是任何符合以下事实的变量名称的占位符:
- 不包含空格
- 它以
pow(和,2)为界 - 由大写字母
[A-Z]、小写字母[a-z]组成, 和/或下划线字符_。 是否有规范的方法可以在 Linux 中进行这种重构?
使用最小工作示例更新 1:
输入:
pow(alpha,2) + pow(beta,2)
(3*pow(betaR_red,2))
2/pow(gammaBlue,3))
-pow(epsilon_gamma,2)+5
期望的输出:
square(alpha) + square(beta)
(3*square(betaR_red))
2/pow(gammaBlue,3))
-square(epsilon_gamma)+5
更新 2:
这里是后续question 的链接,其中有更多解决方案可以执行此特定的查找和替换任务。
【问题讨论】:
-
你可以从
sed 's/pow(var,2)/square(var)/g' <filename>开始;是针对所有文件还是仅针对已知包含该模式的文件运行它取决于您;是否覆盖当前文件或创建新文件取决于您 -
感谢@markp-fuso,但事实上
var是符合上述两个事实的任何变量名的占位符。我进行了编辑以反映它是占位符的事实。 -
一般来说:
sed "s/pow${var},2)/square(${var})/g" <filename>;如果您的变量的内容包含任何会影响sed行为的“特殊”字符,您可能会遇到麻烦......如果是这种情况,您需要提供更多详细信息(否则您'将再次结束您的问题) -
@markp-fuso:再次感谢。我添加了有关 var 的更多详细信息。具体来说,它仅包含
[A-Z]、[a-z]和/或_。 -
@markp-fuso:谢谢!我已经接受了您的回答,因为它运行良好。我将尝试使用其中包含的原则使用
var="(?<=pow\().*?(?=,2\))"发布另一个答案。再次感谢您指导我完成此操作。