我是using sed and grep to search and replace使用std :: shared_ptr来提升:: shared_ptr。如何将egrep
保留在.svn
之外。它导致了当地的腐败:
Transmitting file data .svn: E155017: Commit failed (details follow):
svn: E155017: Working copy text base is corrupt
svn: E200014: Checksum mismatch for text base of '/home/jeffrey/owasp-esapi-cplusplus/doc/html/_codec_8cpp_source.html':
expected: 09ead67f10a06a392ec41455179da560
actual: 310ceca1a9c721b40db494f62854d2df
杰夫
答案 0 :(得分:4)
我建议您使用ack代替grep
来搜索文件。它采用与grep
相同的基本选项。
它会跳过.svn
,.git
... dirs&默认情况下为二进制文件。
示例:
ack -rl --print0 "pattern" . | xargs -0 -l sed -i 's/pattern/other_pattern/g'
最后:
ack -rl --print0 "boost::shared_ptr" . |
xargs -0 -l sed -i 's/boost::shared_ptr/std::shared_ptr/g'
答案 1 :(得分:2)
使用find
xargs
find /path/to/basedir -name .svn -prune -o -iname '*.h' -print0 , -iname '*.cpp' -print0 | xargs -0 sed -i 's/boost::shared_ptr/std::shared_ptr/g'