首页 > 解决方案 > 如何使用 sed/awk 替换原始文件并获得以下所需的输出?

问题描述

我正在编写一个 bash 脚本,可以将一个文件转换为另一个文件,但遇到了问题。

每当程序看到这样的东西(......不包括在内):

......Mul(-a1+b2-c3...+f+e)......

将其更改为:

......M(-a1)*M(b2)*M(-c3)*...*M(f)*M(e)......

Mul 中的变量数量未知,文件中可能多次出现 Mul。文件中还有其他地方出现 + 或 - 。变量可以是一个或多个字符。

我尝试在 sed 中进行分组,一组后跟一个“*”,但由于需要替换未知数量的变量,它似乎不起作用。

标签: awksed

解决方案


这是一个可以执行此操作的 sed 脚本:

:a
s/\(Mul(.[^)]*\)\([+-].\)/\1)*Mul(\2/
ta
s/Mul(+\{0,1\}/M(/g

诀窍是在进行替换后使用测试跳回到开头(例如“Mul(a+b+c)”=>“Mul(a)*Mul(+b+c)”)。


推荐阅读