如何进行全局代码更改

如何进行全局代码更改

我正在将一个站点上的大量代码重复用于新站点。我需要更改两个链接地址,例如将 /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.comabc.usgit 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在的模式中,\<和遵循与的\>相同的逻辑,并且被转义以遵循与 的相同的逻辑。-wgrep.-Fgrep

答案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'

相关内容