Массовая вставка кода перед тегом </body> в 100 файлах - PullRequest
2 голосов
/ 14 ноября 2009

Я хотел бы вставить

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

перед закрывающим тегом body около 100 php файлов. К сожалению, создатель сайта не создал шаблон верхнего или нижнего колонтитула.

Каков наилучший способ сделать это? Я пытался использовать grep / find для получения списка файлов и передачи результатов через xargs в sed, но мне не повезло. Я, вероятно, неправильно понял регулярное выражение. Кто-нибудь может мне помочь с этим?

Также, какие графические инструменты для Apple OS X вы бы порекомендовали?

Спасибо, Mike

редактировать

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

работает.

Ответы [ 8 ]

4 голосов
/ 14 ноября 2009

Использование sed:

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

Опция -i редактирует файл на месте. Если вы скажете -iBAK, то он создаст резервную копию файла перед его редактированием.

3 голосов
/ 14 ноября 2009

Если вы заинтересованы в инструментах с графическим интерфейсом, скачайте TextMate. Поместите все 100 файлов в папку и откройте эту папку с помощью TM. Это переведет TM в режим проекта, и вы увидите все файлы на боковой панели. Теперь выполните Edit>Find>Find In Project, поместите </body> в поле «найти», <?php include_once('google_analytics.php'); ?></body> в поле «заменить», нажмите «заменить» и дайте ему поработать.

2 голосов
/ 14 ноября 2009

для этого требуется ed скрипт

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

Он запускает одну из первых (буквально) программ, когда-либо написанных для Unix, Текстовый редактор ed(1) Кена Томпсона для каждого файла и производит необходимые изменения. Если вы хотите, чтобы он работал с определенными файлами, а не с каждым .html в каталоге, просто измените *.html на "$@".

Читая ссылку на Википедию только сейчас, я узнал кое-что интересное. Кен Томпсон впервые применил регулярные выражения, по-видимому, они были просто математическим выражением, пока не написал ed (1).

1 голос
/ 14 ноября 2009

Dreamweaver выполнит поиск / замену всего локального сайта; Я уверен, что другие HTML-редакторы также.

1 голос
/ 14 ноября 2009

Вам нужно указать массив с именами файлов в $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);
}
0 голосов
/ 14 ноября 2009

Я не разработчик PHP, но является ли PHP допустимым форматом XML? Это не похоже на это, но что я знаю. Даже если успех этого ответа может зависеть больше от того, являются ли файлы, с которыми вы работаете, действительным PHP. Но ... если это так, было бы довольно просто использовать XML-преобразование (xslt) для соответствия тегу body, скопировать его содержимое и добавить новый тег после сопоставленного содержимого.

0 голосов
/ 14 ноября 2009

Некоторые IDE, такие как dreamweaver, предоставляют функции для поиска и замены во многих файлах, целых папках и т. Д. Вы можете использовать один из них и выполнить поиск и заменить, заменив тег close body на нужный код.

0 голосов
/ 14 ноября 2009

Как насчет замены на

</body>

с

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...