如何为'vector'而不是'std :: vector'

时间:2013-09-10 10:58:54

标签: c++ grep

我在代码中的公共标题中发现了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

但我在构成否定方面遇到了问题,例如:

  • 找到“ X ”,但不是“ YX ”,也不是“ Y. * X

任何人都可以帮忙吗?

4 个答案:

答案 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::