我想插入
<?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'
作品。
答案 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)
#!/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>