awk - 如何使用 sed/awk 替换原始文件并获得以下所需的输出?
问题描述
我正在编写一个 bash 脚本,可以将一个文件转换为另一个文件,但遇到了问题。
每当程序看到这样的东西(......不包括在内):
......Mul(-a1+b2-c3...+f+e)......
将其更改为:
......M(-a1)*M(b2)*M(-c3)*...*M(f)*M(e)......
Mul 中的变量数量未知,文件中可能多次出现 Mul。文件中还有其他地方出现 + 或 - 。变量可以是一个或多个字符。
我尝试在 sed 中进行分组,一组后跟一个“*”,但由于需要替换未知数量的变量,它似乎不起作用。
解决方案
这是一个可以执行此操作的 sed 脚本:
:a
s/\(Mul(.[^)]*\)\([+-].\)/\1)*Mul(\2/
ta
s/Mul(+\{0,1\}/M(/g
诀窍是在进行替换后使用测试跳回到开头(例如“Mul(a+b+c)”=>“Mul(a)*Mul(+b+c)”)。
推荐阅读
- azure - Azure 容器实例安全 VPN
- node.js - 在 Express 服务器上将 Socket.io 切换到 WebSocket 通信时出错
- laravel - 通过 Passport Laravel 在 Adonis JS 中使用生成的令牌
- node.js - 自定义错误响应在用 typescript 编写的 nodejs 中不起作用
- react-native - React-redux 抛出错误:未为 react-native-web 定义导出
- batch-file - 如何批量修复对另一个变量的引用?
- azure - 使用 Azure AD 登录应用程序时,如何在应用程序级别添加徽标、横幅或文本以显示在登录页面上?
- datadog - DataDog 仪表板误报
- python - 使用模型字典列出理解
- javascript - 如何在 Node JS 中使用重定向从 post 路由发送用户数据(如 Id)以获取路由?