与短语匹配的正则表达式,除非它已经加前缀
发布时间:2020-12-14 05:58:13 所属栏目:百科 来源:网络整理
导读:我正在清理一个大的C代码库,我需要将所有类型为“vector”的变量更改为“std :: vector”.跳过代码中的#include和注释.最重要的是,如果表达式已经写成“std :: vector”,请不要将其转换为“std :: std :: vector” 那是: #include vectorvectorFoo foolist;
我正在清理一个大的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/vectors{0,1}</std::vector</g' < codefile > tmpfile sed 's/std::std/std/' < tmpfile > codefile 第一个sed匹配“vector< and”vector<“并转换为”std :: vector<“. 第二个sed修复了转换“std :: vector<”的副作用进入“std :: std :: vector<”. 如何合并上面的两个不同的正则表达式,这样我就可以有一个单独的sed命令来正确修复代码. 我曾尝试在线阅读有关前瞻和后视的内容,但我的眼睛开始消失. 解决方法
您可以通过使用使第一个正则表达式也匹配可能的std ::
sed -r 's/[std:]*vectors{0,1}</std::vector</' < codefile > tmpfile 顺便说一句:您可以通过添加-i并仅将文件作为命令行参数传递来进行更改: sed -i -r 's/[std:]*vectors{0,1}</std::vector</' codefile (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |