【问题标题】:Automatically rename _s theme (batch search & replace text)自动重命名 _s 主题(批量搜索和替换文本)
【发布时间】:2012-03-23 07:55:29
【问题描述】:

我刚开始使用_s wordpress theme,那里的说明说

您要做的第一件事是复制_s目录并更改 命名为别的东西。比如说,megatherium。然后你需要做 对所有模板中的名称进行三步查找和替换。

  1. 在单引号内搜索_s 以捕获文本域。
  2. 搜索_s_获取所有函数名
  3. 搜索_s,并在其前加一个空格以替换它在 cmets 中的所有出现。 (你可以用大写的版本替换它 您的主题名称。)

或者...

Search for:'_s'  Replace with:'megatherium'   
Search for:_s_   Replace with:megatherium_   
Search for: _s   Replace with: Megatherium  

所以我尝试了这个:

#!/bin/sh
find /path/to/wp-content/themes/mytheme/ -type f | xargs perl -pi -e "s/'_s'/'mytheme'/g"
find /path/to/wp-content/themes/mytheme/ -type f | xargs perl -pi -e "s/_s_/mytheme_/g"
find /path/to/wp-content/themes/mytheme/ -type f | xargs perl -pi -e "s/ _s/ mytheme/g"

使用 perl 对所有文件执行内联搜索/替换,但是当我尝试查看我的 wordpress 时,这会搞砸并返回 500 错误。

有没有更好的方法来对一组文件的文本执行搜索和替换?一个不会让我的 php 崩溃的?

编辑

我在 OSX Lion 上运行它...

当我使用find ./mytheme -name \*.php -type f -exec php -l '{}' \;时,它表明任何地方都没有任何语法错误。

编辑 2

在询问这个问题并在新副本上运行几次之后,它就可以工作了。额外的眼睛就像通过心灵感应修复事物的魔力。

【问题讨论】:

  • “这把一切都搞砸了”——具体来说,搞砸了什么?
  • 对于语法检查,请尝试find ./mytheme -name \*.php -type f -exec php -l '{}' \; 这将在每个文件上一次运行php -l,与xargs 不同,它将所有文件名作为参数传递给同一命令。
  • 谢谢,@IlmariKaronen,这好多了,使用xargs 就像我拥有的​​那样应该是find ./mytheme -name \*.php -type f | xargs -n 1 php -l(我错过了-n 1)但是为什么当你不需要管的时候呢?
  • 我看不出您用于执行搜索和替换的命令为何不起作用的任何原因。您是否检查了服务器日志以了解导致 500 错误的原因?
  • 嗯...它现在可以工作了... wtf。感谢大家的宝贵时间,您的 mojo 解决了问题!

标签: regex perl find replace xargs


【解决方案1】:

如果我正确阅读了您的问题,您尝试替换的所有文本标记都是:

  1. 文本标记_s,或
  2. _s_ 开头的令牌

所以'_s'_s_setup() 应该被替换,get_s_substr() 不应该被替换。断言\b,以匹配“单词边界”,在这里可能会有所帮助。

$ find /path/to/wp-content/themes/mytheme/ -type f | \
    xargs perl -pi -e "s/\\b_s\\b/mytheme/g"


$ find /path/to/wp-content/themes/mytheme/ -type f | \
    xargs perl -pi -e "s/\\b_s_/mytheme_/g"

可能会让你更接近你想去的地方。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 2011-12-13
    • 2013-12-31
    • 2016-10-08
    相关资源
    最近更新 更多