我正在图书馆工作,我做了一个重大改变。我的所有项目都导入github.com/retep-mathwizard/utils/src/...
,但我已将项目缩短为github.com/retep-mathwizard/utils/...
。我需要从~
开始查找它的每一次出现,并替换所有出现的事件。有没有办法做到这一点?
答案 0 :(得分:2)
sed
是你的朋友。
$ sed -i 's_github.com/retep-mathwizard/utils/src_github.com/retep-mathwizard/utils_g' *.txt
其中*.txt
是您要搜索/替换的任何文本文件。请注意,_
很重要。它用于分隔搜索和替换中的模式,因为您的模式中同时具有标准/
分隔符和经常使用的替代-
。 -i.bak
选项会告诉sed
编辑文件,并保存扩展名为.bak
的备份副本。
如果文件位于多个子目录中,则需要使用find
和xargs
之类的组合。
$ find ~ -name "*.txt" -print0 | xargs -0 sed -i.bak 's_github.com/retep-mathwizard/utils/src_github.com/retep-mathwizard/utils_g'
同样,*.txt
是正则表达式只会找到您要替换文本的文件。
免责声明:与涉及这些工具的任何内容一样,您应首先尝试更换可替换的内容或首先在新的git分支中使用。
编辑:删除了-i
标记上的扩展名。正如评论中所指出的,一切都在源代码管理之下,因此在不保存备份文件的情况下进行就地编辑应该没问题。
答案 1 :(得分:1)
此命令查找主目录中的所有文件,减去.git
文件夹中的文件:
find ~ -type d -name '.git' -prune -o -type f -print
要用其他东西替换所有实例,我们可以使用sed:
sed 's|\(github\.com/retep-mathwizard/utils/\)src/|\1|g' filename
这会捕获我们想要保留的部分,并在替换中使用它。
结合这些命令来浏览所有文件,使用-i
标志进行就地编辑(使用-i ''
进行BSD sed / Mac OS) - 我们替换-print
操作与-exec sed
:
find ~ -type d -name '.git' -prune -o -type f \
-exec sed 's|\(github\.com/retep-mathwizard/utils/\)src/|\1|g' {} \;