由于我新项目是从 golang 旧项目中复制的代码,复制之后,需要将原 module 名替换为新的名字。 但是由于项目目录众多,文件众多,如果一个一个文件修改非常繁琐,所以需用 sed 来帮忙。
sed is a stream editor
一行 sed 命令搞定
例如需要将目录中所有的 sunzhongwei.com/member 替换为 sunzhongwei.com/repair,命令如下:
find /home/zhongwei/work/server_repair/backend/ \( -type d -name .git -prune \) -o -type f | xargs -0 sed -i 's/sunzhongwei\.com\/member/sunzhongwei\.com\/repair/g'
find print0 参数的作用
对比一下:
> find /home/zhongwei/work/server_repair/backend \( -type d -name .git -prune \) -o -type f -print0
/home/zhongwei/work/server_repair/backend/go.mod/home/zhongwei/work/server_repair/backend/go.sum/home/zhongwei/work/server_repair/backend/main.go
> find /home/zhongwei/work/server_repair/backend \( -type d -name .git -prune \) -o -type f
/home/zhongwei/work/server_repair/backend/go.mod
/home/zhongwei/work/server_repair/backend/go.sum
/home/zhongwei/work/server_repair/backend/main.go
加 print0 参数,是为了不以换行符分隔,以规避文件名中包含换行符的情况,我觉得有点多虑了。 我自己的项目文件,还不至于出现带换行符的情况。
参考
- https://stackoverflow.com/questions/1583219/how-to-do-a-recursive-find-replace-of-a-string-with-awk-or-sed
- https://www.gnu.org/software/sed/manual/sed.html
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式