「vector」型のすべての変数を「std::vector」に変更する必要がある大規模なC++コードベースをクリーンアップしています。コード内の#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...)
これまでのところ、これを2つの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<」に変換します。
2番目のsedは、「std ::vector<」を「std::std ::vector<」に変換する副作用を修正します。
上記の2つの異なる正規表現をマージして、コードを正しく修正する単一のsedコマンドを作成するにはどうすればよいですか。
先読みと後読みについてオンラインで読んでみましたが、目が燃え始めています。