我正在将一个站点上的大量代码重复用于新站点。我需要更改两个链接地址,例如将 /abc/ 更改为 /cba/,将 abc.com 更改为 abc.us。我可以登录服务器并使用“终端”软件,或使用 php 编辑器在本地编辑它。我拥有的编辑器没有这种功能。我有数千行代码,但找不到所有需要更改的情况。
一定有一个简单的解决方案。我只是不知道在哪里可以找到它。
答案1
在默认的 Ubuntu 存储库中,有一款名为 Geany 的应用程序专门用于实现该工作流程。Geany 非常轻量,可以同时批量编辑 50 个 Web 文件。由于 Geany 是一个 GUI 程序,因此使用起来非常简单,而且与使用终端相比,它的优势在于您可以看到自己正在做什么,因为每个文件都在单独的选项卡中打开。Geany 的代替功能支持正则表达式,这对于编辑标记标签非常有用。当我编辑完多个文件后,我通常会在 Web 浏览器中同时打开所有 50 个文件来检查我的工作。
要在所有当前支持的 Ubuntu 版本中安装 Geany,请打开终端并输入:
sudo apt-get install geany
答案2
您可以使用grep
查找包含 的文件abc.com
。然后您可以使用替换sed
。您只需小心避免误报。我会先将所有站点文件添加到 Git 存储库,然后执行替换,使用 检查替换,这样如果出现问题,我可以轻松回滚。abc.com
abc.us
git diff
cd path/to/site
git init
git add .
git commit -m 'Add files'
grep -rlFwZ abc.com . | xargs -0 sed -i 's/\<abc\.com\>/abc.us/g'
git diff
标志的解释grep
:
-r
在所有子目录中递归搜索-l
打印匹配的文件名而不是匹配项-F
将模式视为文字字符串,而不是正则表达式(保留一个.
点,而不是“任何字符”)-w
匹配整个单词(因此“foo abc.com bar”匹配,而“fooabc.com bar”或“foo abc.combar”不匹配)
sed
在的模式中,\<
和遵循与的\>
相同的逻辑,并且被转义以遵循与 的相同的逻辑。-w
grep
.
-F
grep
答案3
这两个命令应该有帮助:
grep -RlZE abc.com /path/to/folders | xargs -0 sed -i 's/abc.com/abc.us/g'
grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i 's_/abc/_/cba/_g'
更多信息:
grep -RlZE abc.com /path/to/folders
:查找包含您要更改的文本的文件,并返回文件路径。这将提供给命令sed
。-R
:递归搜索文件-l
:仅返回匹配的文件路径-E
:grep 扩展正则表达式开关-Z
:用于处理含有奇数字符串的文件
要创建备份,假设空间不是问题,请运行如下命令来创建备份,以防出现问题:
grep -RlZE abc.com /path/to/folders | xargs -0 sed -i.bak 's/abc.com/abc.us/g'
grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i.bak 's_/abc/_/cba/_g'