gpt4 book ai didi

command-line - 如何在 SVN 结帐中进行递归查找和替换?

转载 作者:行者123 更新时间:2023-12-04 04:08:02 25 4
gpt4 key购买 nike

我如何查找和替换每次出现的:

foo


bar

在/my/test/dir/目录树下的每个文本文件中(递归查找/替换)。

但是我希望能够在 SVN 结帐中安全地完成它,而不是触及 .svn 目录中的任何内容

与此类似,但现在有 SVN 限制: Awk/Sed: How to do a recursive find/replace of a string?

最佳答案

有几种可能:

使用查找:

使用 find 创建所有文件的列表,然后通过管道将它们发送到 sed或在您引用的答案中建议的等效项相当简单,并且只需要扫描文件一次。

您将使用与您引用的问题相同的答案之一,但添加 -path '*/.svn' -prune -ofind .为了修剪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' {} +

使用递归 grep:

如果您有一个带有 GNU grep 的系统,您也可以使用它来查找文件列表。这可能比 find 效率低,但它确实允许您只调用 sed在匹配的文件上,我个人发现语法更容易记住(或从联机帮助页中找出):
sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .`
-l选项导致 grep 只输出文件名列表,而不是匹配的行。

使用 GUI 编辑器:

或者,如果您使用的是 Windows,请执行我的操作——获取 NoteTab 编辑器的副本(可在免费版本中使用),并使用它的 search-and-replace-on-disk 命令,该命令会忽略隐藏的 .svn 目录自动和正常工作。

编辑:将查找模式更正为 */.svn而不是 .svn ,添加了更多细节和其他一些可能性。但是,这取决于您的平台和 svn 版本: .svn没有 */在某些情况下可能需要,例如 CentOS 7。

关于command-line - 如何在 SVN 结帐中进行递归查找和替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com