我正在清理一个大型 C++ 代码库,我需要将“vector”类型的所有变量都更改为“std::vector”。跳过代码中的#include 和注释。最重要的是,如果表达式已经写成“std::vector”,不要将其转换为“std::std::vector”
那是:
#include <vector>
vector<Foo> foolist;
typedef vector<Foo> FooListType;
std::vector<Foo> otherfoolist;
int main()
{
// this vector is for iteration
for (vector <Foo>::iterator itor = foo.begin...)
转换为
#include <vector>
std::vector<Foo> foolist;
typedef std::vector<Foo> FooListType;
std::vector<Foo> otherfoolist;
int main()
{
// this vector is for iteration
for (std::vector<Foo>::iterator itor = foo.begin...)
到目前为止,我已将其范围缩小为两个 sed 命令
sed -r 's/vector\s{0,1}</std::vector</g' < codefile > tmpfile
sed 's/std::std/std/' < tmpfile > codefile
第一个 sed 匹配 "vector< 和 "vector <" 并转换为 "std::vector<"。
第二个 sed 修复了将“std::vector<”转换为“std::std::vector<”的副作用。
如何合并上面的两个不同的正则表达式,这样我就可以有一个正确修复代码的 sed 命令。
我曾尝试在线阅读有关前瞻和后视的信息,但我的眼睛开始燃烧。