我的任务是在公司重新编译一个遗留的 C++ 项目,在创建一个 32 位 chroot 之后,完成编译依赖项的所有无聊工作等等,我终于发现大多数文件都使用标准的异常类无需添加 'using namespace std' 或在其前面加上 'std::'。
我创建了一个简单的 sed 脚本来批量更改所有文件。但有时替换不是我想要的。我的脚本是这样的:
sed -r 's/(catch.*)[^std::](exception)/\1 std::\2/' File.cpp
但是当我运行它时,我会得到这样的东西(只是替换):
}catch std::exception& e){
}catch(const std::exception& e){
}catch(const std::exception& e){
原来的行是这样的:
}catch(exception& e){
}catch(const exception& e){
}catch(const exception& e){
因此,当 catch 后面跟着“(异常”)时,我遇到了问题,并且当它后面跟着 (const ...) 时它工作正常
我试图通过尝试匹配第一个反向引用表达式中的 ( 即通过将其更改为 "(catch.*\()" 来稍微更改正则表达式,但它仍然不起作用。
任何人都可以帮我解决这个问题吗?
谢谢