Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Поиск и массовая правка файлов через консоль


Автор: jizzle 28.10.2011, 12:15
Здравствуйте.

Я недавно пользуюсь Centos, вот у меня 2 вопроса, подскажите пожалуйста.

1. Как (наверное, при помощи find) найти все файлы с расширением .html и выполнить в них php инклуд в определённом месте? допустим номер строки или между тегами <body></body> хотя бы. Так вышло, что долгое время свой сайт писал на html - всё в отдельном файле, ни одного инклуда, вручную я замучаюсь smile

Я знаю, например, такой вариант - он добавляет в конец файла

Код

find . -name '*.html' -print0 | xargs -0 sed -i '$a<?php include 
($_SERVER['\''DOCUMENT_ROOT'\''].'\''/dir/dir/dir/file.php'\'');?>'


А как сделать в нужном месте или хотя бы в тегах <body></body>? Какие вообще есть варианты работы с файлами таким образом?

2. Подскажите, как создать ФТП аккаунт для пользователя? Какая это команда?

Автор: newbee 28.10.2011, 13:29
1. Вставляем в N-ую строку:
Код

find . -type f -and -name "*\.html" | while read f; do head -n$(expr $N - 1) $f > /tmp/$$;\
 echo "include('filename.php')" >> /tmp/$$; tail -n+$N $f >> /tmp/$$; mv /tmp/$$ $f; done

Между body тоже можно, сначала найди позицию вхождения <body> в файл, потом самую малость модифицируй мой скрипт, прочитав man-ы по head и tail (они умеют работать не только со строками, но ис байтами).

2. Установи ftp-сервер.

Автор: bilbobagginz 28.10.2011, 16:37
еще одна причина изучать python.

Автор: jizzle 28.10.2011, 23:54
newbee, спасибо за ответ.

А твой скрипт, если его так вставить - как выполнит, в каком месте? Я не очень хорошо разбираюсь, только учусь. Определить позицию вхождения <body> - это как?

Такой результат получил на выполнение

Код

expr: syntax error
sh:  : command not found
tail: invalid option -- n
Try `tail --help' for more information.


На счёт фтп, я имел в виду создать фтп аккаунт через SSH. Типа как adduser.

Автор: bilbobagginz 29.10.2011, 02:10
jizzle, удаленный запуск скриптов, которые ты увидел на каком-то форуме - не дело.
не охота копипастить, но при наличии sed версии 4.0 и выше, можно вот так http://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq4_022.html.
и регулярка была бы:
Код

"s|<body.*$|&\n<?php include ($_SERVER['\''DOCUMENT_ROOT'\''].'\''/dir/dir/dir/file.php'\'');?>|g" 

только я не понял зачем так много одиночных ковычек.

Автор: jizzle 29.10.2011, 22:00
Спасибо за ответ.

Что за скрипты?

Я просто тизер хочу на все страницы себе поставить, а страниц много, отдельного footer или header, который бы вызывался на всех страницах нету.

Вот так получается:

Код

find . -name '*.html' -print0 | xargs -0 sed "s|<body.*$|&\n<?php include ($_SERVER['\''DOCUMENT_ROOT'\''].'\''/dir/dir/dir/file.php'\'');?>|g" 


Кто-нибудь может итоговый вариант сделать? smile Я видимо не так как-то это понимаю.

Автор: bilbobagginz 29.10.2011, 23:19
Цитата(jizzle @  29.10.2011,  21:00 Найти цитируемый пост)
Кто-нибудь может итоговый вариант сделать?  Я видимо не так как-то это понимаю.

ты прекрасно все понимаешь: найдется идиот, который тебе все это сделает как ты хочешь.
ты только жди.... терпеливо, с платочком.

Автор: jizzle 30.10.2011, 00:23
Я думал на форуме можно попросить помощи. Я не адекватно общаюсь, что ли, я не пойму? К чему грубость?

Ну найдётся, поможет, скажу спасибо - от кого-то убудет что ли?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)