在100个文件中标记之前批量插入代码

时间:2009-11-14 00:09:01

标签: php html sed awk bulkinsert

我想插入

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

关闭大约100个php文件的body标签之前。不幸的是,制作网站的人没有制作页眉或页脚模板。

最好的方法是什么?我已经尝试使用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'

作品。

8 个答案:

答案 0 :(得分:4)

使用sed:

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

-i选项可以编辑文件。如果您说-iBAK,那么它会在编辑之前创建该文件的备份。

答案 1 :(得分:3)

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

答案 2 :(得分: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 Thompson's ed(1) text editor在每个文件上并进行必要的编辑。如果您希望它可以处理特定文件而不是目录中的每个.html,只需将*.html更改为"$@"

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

答案 3 :(得分: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);
}

答案 4 :(得分:1)

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

答案 5 :(得分:0)

某些IDE类似Dreamweaver提供了在许多文件,整个文件夹等中查找和替换的功能。您可以使用其中一个并执行查找和替换,将close body标记替换为您想要的代码。

答案 6 :(得分:0)

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

答案 7 :(得分:-1)

如何替换

</body>

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