作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何查找和替换每次出现的:
foo
bar
最佳答案
有几种可能:
使用查找:
使用 find 创建所有文件的列表,然后通过管道将它们发送到 sed
或在您引用的答案中建议的等效项相当简单,并且只需要扫描文件一次。
您将使用与您引用的问题相同的答案之一,但添加 -path '*/.svn' -prune -o
后 find .
为了修剪SVN目录。见 this question讨论使用 prune
选项与 find
- 尽管请注意,他们的模式是错误的。因此,要打印出所有文件,您可以使用:
find . -path '*/.svn' -prune -o -type f -print
xargs
按照您引用的问题中的建议,调用或以任何方式进行个别替换。那里有很多关于不同选项的讨论,我不会在这里重现,尽管我更喜欢
John Zwinck's answer 中的版本:
find . -path '*/.svn' -prune -o -type f -exec sed -i 's/foo/bar/g' {} +
sed
在匹配的文件上,我个人发现语法更容易记住(或从联机帮助页中找出):
sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .`
-l
选项导致 grep 只输出文件名列表,而不是匹配的行。
*/.svn
而不是
.svn
,添加了更多细节和其他一些可能性。但是,这取决于您的平台和 svn 版本:
.svn
没有
*/
在某些情况下可能需要,例如 CentOS 7。
关于command-line - 如何在 SVN 结帐中进行递归查找和替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663491/
我是一名优秀的程序员,十分优秀!