2

我想插入

<?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'

作品。

4

8 回答 8

4

使用 sed:

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

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

于 2009-11-14T00:40:31.350 回答
3

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

于 2009-11-14T00:13:50.157 回答
2

这需要一个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 Thompsoned(1)对每个文件的文本编辑器并进行必要的编辑。如果您希望它处理特定文件而不是.html目录中的每个文件,只需更改*.html"$@".

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

于 2009-11-14T00:29:26.647 回答
1

您需要提供一个包含文件名的数组,$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);
}
于 2009-11-14T00:13:15.410 回答
1

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

于 2009-11-14T00:15:18.780 回答
0

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

于 2009-11-14T00:15:53.440 回答
0

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

于 2009-11-14T00:22:40.107 回答
-1

换个怎么样

</body>

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

?

于 2009-11-14T00:13:28.407 回答