【问题标题】:Bulk Insert Code Before </body> Tag in 100 Files在 100 个文件中的 </body> 标记之前批量插入代码
【发布时间】:2009-11-14 10:03:51
【问题描述】:

我想插入

<?php include_once('google_analytics.php'); ?>

在大约 100 个 php 文件的结束正文标记之前。不幸的是,制作该网站的人没有制作页眉或页脚模板。

最好的方法是什么?我尝试使用 grep/find 获取文件列表并通过 xargs 将结果传送到 sed,但我没有运气。我可能有正则表达式错误。谁能帮我解决这个问题?

另外,您有没有推荐的 Apple OS X 图形工具?

谢谢, 迈克

编辑

find . -print0 -name "*.php" | xargs -0 perl -i.bak -pe 's/<\/body>/<?php include_once("google_analytics.php"); ?>\n<\/body>/g'

有效。

【问题讨论】:

  • 既然你正在这样做:一旦你想出了一个解决方案,你可能想要改为 include_once("footer.php") 和 "header.php" 以便您可以进行这些类型的更改将来更容易!
  • rascher:很好的建议。
  • 你们这些 mac 家伙...为什么需要图形工具来解决文本替换问题?
  • 我不知道,拉舍尔。我认为这样做可能会产生误导,而不是将所有其余的通用页脚代码放在 footer.php 中。它也没有真正结束,我可能也应该制作一个 header.php。尼克夫,好点子。这有什么问题? grep -lz "

标签: php html sed awk bulkinsert


【解决方案1】:

使用 sed:

 sed -i s/'<\/body>'/"<?php include_once('google_analytics.php'); ?>\n<\/body>"/ *.htm

-i 选项在原地编辑文件。如果你说-iBAK,那么它会在编辑之前创建文件的备份。

【讨论】:

  • 好吧,所有这些 perl 废话都是不必要的。很高兴知道。 :)
【解决方案2】:

如果您对 GUI 工具感兴趣,请下载 TextMate。将所有 100 个文件放在一个文件夹中,然后使用 TM 打开该文件夹。这会将 TM 置于项目模式,您将在边栏中看到所有文件。现在,执行Edit&gt;Find&gt;Find In Project,将&lt;/body&gt; 放入“查找”字段,将&lt;?php include_once('google_analytics.php'); ?&gt;&lt;/body&gt; 放入“替换”字段,点击替换并让它运行。

【讨论】:

    【解决方案3】:

    这需要一个 ed 脚本

    #!/bin/sh
    for i in *.html; do
    ed $i << \eof
    ?</body>?s/^/<?php include_once('google_analytics.php'); ?>&/
    w
    q
    eof
    done
    

    它启动了为 Unix 编写的第一个(字面意思)程序之一,Ken Thompson's ed(1) text editor 在每个文件上进行必要的编辑。如果您希望它处理特定文件而不是目录中的每个.html,只需将*.html 更改为"$@"

    刚刚阅读了维基百科的链接,我学到了一些有趣的东西。 Ken Thompson 首次实际应用了正则表达式,在他编写 ed(1) 之前,它们显然只是一个数学表达式。

    【讨论】:

    【解决方案4】:

    您需要在$files 中提供一个包含文件名的数组,以使以下解决方案起作用:

    foreach ($files as $file)
    {
        $txt = file_get_contents($file);
    
        $txt = str_replace('</body>', '<?php include_once(\'google_analytics.php\'); ?>'."\n".'</body>', $txt);
    
        file_put_contents($file, $txt);
    }
    

    【讨论】:

    • 另一种聪明的方法。谢谢。我可以坚持使用 directory_iterator 并且一切顺利。
    【解决方案5】:

    Dreamweaver 将对整个本地站点进行查找/替换;我相信其他 html 编辑器也会这样做。

    【讨论】:

    • 谢谢...不过 Dreamweaver 对我来说太贵了。
    【解决方案6】:

    像dreamweaver 之类的一些IDE 提供了在许多文件、整个文件夹等中进行查找和替换的功能。您可以使用其中之一并进行查找和替换,将关闭的正文标记替换为您想要的代码。

    【讨论】:

      【解决方案7】:

      我不是 PHP 开发人员,但 PHP 是一种有效的 XML 格式吗?它看起来不像,但我知道什么。即使这个答案的成功可能更多地取决于您正在使用的文件是否是有效的 PHP。但是...如果是这样的话,使用 XML 转换 (xslt) 来匹配正文标记、复制其内容并在匹配的内容之后附加一个新标记会相当简单。

      【讨论】:

      • 我不确定 XML 解析器将如何处理
      • 是的,我就是这么想的。不过值得一试。
      【解决方案8】:

      如何替换

      </body>
      

      <?php include_once('google_analytics.php'); ?></body>
      

      ?

      【讨论】:

      • 也许他想做的事情和他实际做的事情是两件不同的事情?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多