我在代码中的公共标题中发现了using namespace std;
,我想删除它。
因此,我需要使用vector
替换代码中所有出现的std::vector
。
我需要写一个表达式来grep它,忽略了以下情况:
std::vector
// comment with a vector
"string with a vector"
所以我最终不会像
那样替换它们std::std::vector
// comment with a std::vector
"string with a std::vector"
到目前为止,我已经设法使用表达式
忽略了''std :: vector''的情况grep "^[^:]*vector" *.h
但我在构成否定方面遇到了问题,例如:
任何人都可以帮忙吗?
答案 0 :(得分:4)
您可能会将其称为作弊,但我只需将所有std::vector
替换为std::fector
,将所有vector
替换为std::vector
,然后替换所有std::fector
回到std::vector
。
这并不酷,但对于一次性解决方案,它可能比构建复杂的表达式更快地解决您的问题。仅仅考虑表达就需要花费更长的时间。
确保你的程序不使用std :: fector:)
答案 1 :(得分:2)
鉴于此输入
$ cat a
std::vector
// comment with a vector
"string with a vector"
replace this vector
你需要管道grep以便它们是AND。否则使用egrep "condition1|condition2"
它们将是OR。
skip :vector skip starting with " skip starting with /
---- ----- -----
$ grep "^[^:]*vector" a | grep "^[^\"]*vector" | grep "^[^/]"
replace this vector
答案 2 :(得分:2)
除非你使用vector a lot ,否则你可以删除using声明并手动浏览错误消息。通常,您只需要更改实例化向量的位置,这通常不应该是这样。
答案 3 :(得分:1)
我通常这样做的方法是全局替换\<vector\>
std::vector
,然后全局替换\<std::std::
std::
。