自动重命名_s主题(批量搜索和替换文本)

时间:2012-03-05 20:29:30

标签: regex perl find replace xargs

我刚开始使用_s wordpress theme,其中的说明是

  

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

     
      
  1. 在单引号内搜索_s以捕获文本域。
  2.   
  3. 搜索_s_以捕获所有功能名称
  4.   
  5. _s之前搜索一个空格,以便在评论中替换它的所有匹配项。 (你用大写的版本替换它   你的主题名称。)
  6.         

    或......

    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

在询问了这个问题并在新副本上运行了几次后,它正在运行。额外的眼睛就像通过心灵感应来固定东西的魔力。

1 个答案:

答案 0 :(得分:4)

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

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

    因此'_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"
    

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