Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: программа для автоматизации процесса поиска и замены текста в веб-страницах .htm  (Прочитано 1350 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 73

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Какая есть хорошая программа для автоматизации процесса поиска и замены текста в веб-страницах .htm?
Программа нужна по причине того, что *#*%#  веб-броузер сохранил странички и каталоги на диск, но при открытии их броузером на другом ПК, он странички показывает “голые”, т.е. без картинок, хранящихся в связанной папке. Приходится открывать каждую страницу в BlueFish и править название каталога (абракадабракаталог_files) со всеми картинками на правильное, а не то, которое указал *#*%#  веб-броузер.
Броузер Opera «подзабил» на кириллицу после его обновления.
Я так понимаю, что придется писать скрипт для Bash. Подскажите, пожалуйста, в какую сторону смотреть.
   Как автоматизировать  процесса поиска-замены текста в веб-страницах .htm, а именно написания названия файлов картинок и других элементов, так как они сохранены на диске в связанном каталоге, т.е. в таком же чередовании прописных и строчных литер, а то в Linux это критично?
   Я немного попробовал что-то написать, но уперся в проблему присвоения переменной значения из файла.
Например, нужно присвоить переменной «i» результат выполнения команды
find -type f -name "*.htm*" -print | grep -c .htm или прочесть его из файла out
find -type f -name "*.htm*" -print | grep -c .htm > out ,
которая подсчитывает кол-во веб-страниц в указанном каталоге.
Далее начинается цикл обработки каждой страницы из этого каталога, т.е. как-то необходимо организовать поиск и замену в каждой странице, которая упоминается в отдельной строке файла out 'абракадабракаталог_files'  на 'каталог_files'.
Необходимо искать каждое упоминание, например “%12%3E%3F%40%3Eс_files” в веб-странице «Вопрос.htm» и менять левую часть (название каталога) на «Вопрос_files».
Нужно построчно читать название каждой веб-страницы из файла out, присвоить переменной, далее отрезать хвостик .htm, заменить его на “название веб-страницы_files” открыть эту  веб-страницу произвести поиск-замену и сохранить изменения.
Кто-то что-то может посоветовать? Какие команды (инструменты) использовать?

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
sed - наше все. По моему им все вышеописанное сделать можно.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн 73

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
А как присвоить переменной значение которое хранится в текстовом файле?
Например, результат выполнения команды
find -type f -name "*.htm*" -print | grep -c .htm > out ,
которая подсчитывает кол-во веб-страниц в указанном каталоге.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
list=`find -type f -name "*.htm*" -print | grep -c .htm`
echo $list
Вы про то?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн 73

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
К сожалению, указанный Вами код не выдает необходимого результата.
Проверьте в терминале или консоле.
Вы получите
find -type f -name "*.htm*" -print | grep -c .htm
Нужен РЕЗУЛЬТАТ работы этих команд(пайпа), который можно записать в файл out
find -type f -name "*.htm*" -print | grep -c .htm > out
Как присвоить цифровое значение (кол-во веб-страниц в указанном каталоге) из файла  out ?
Или РЕЗУЛЬТАТ работы этих команд(пайпа)
find -type f -name "*.htm*" -print | grep -c .htm


Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
find /path -type f -name *.html | wc -lКоличество html файлов  в папке.

PS: пишите разборчивей
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: http://help.ubuntu.ru/wiki/fixme

Оффлайн 73

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
Конфуций как-то сказал, приблизительно так:
“Люди, думая что говорят об одном и том же , на самом деле говорят о разных вещах.”

Количество *.htm файлов  в папке /path подсчитывают ОБЕ команды
find /path -type f -name "*.htm*" -print | grep -c .htm
find /path -type f -name *.htm | wc -l
Спасибо, Вам за еще одну команду, может как-то пригодиться, но сейчас нужно
переменной, например list, присвоить результат выполнения хотя бы одной из них.
КАК ЭТО СДЕЛАТЬ?
Объясняю  детально еще раз.
Например, у Вас в каталоге /path  лежит 10 файлов *.htm и связанных с ними каталогов с картинками и т.п.
Вы хотите
получить список всех необходимых файлов благодаря
ls /path *.htm > out-spisok
подсчитать кол-во файлов *.htm
   find /path -type f -name "*.htm*" -print | grep -c .htm   ИЛИ
find /path -type f -name *.htm | wc -l
присвоить переменной. например  list  ПОЛУЧЕННОЕ от одной из вышеуказанных команд значение (10)
КАК??????????
организовать цикл обработки каждой *.htm страницы (файла) из этого каталога
var="1"
# пока var меньше или равно переменной  list (кол-ва веб страниц)
while [ $var -le  $list ]
 
do

…......
…......
var=$[$var+1]

done
там, где …...... д.б.
присвоить переменной, например webfile 1-е (потом 2-е и т.д.) значение из списка  out-spisok
sed -n $var,+0p out-spisok
КАК??????????
поиск 1-го значения '_files' в webfile
определение начала и конца 'абракадабракаталог_files'  без '_files'
В *.htm файле название каталога находится между =” и _files
КАК??????????
присвоение переменной poisk 'абракадабракаталог'
poisk = 'абракадабракаталог'
замена во всем файле webfile 'абракадабракаталог' на 'правильныйкаталог_files', где 'правильныйкаталог' (foldernew) совпадает с названием страницы и каталога на диске в папке /path и равно
foldernew = $webfile (без '.htm') +'_files'
sed s/$poisk/$foldernew/g $webfile > $webfile-out

конец цикла
Проблемы
Как в bash скрипте сделать, ЕСЛИ ЭТО ВОЗМОЖНО
присвоение переменной результата выполнения команды или последовательности команд (пайпа)
определение начала и конца искомого значения в тексте ('абракадабракаталог_files') и его «вырезание» и присвоение переменной

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
присвоение переменной результата выполнения команды или последовательности команд (пайпа)
for i in `find ./ -type f -name '*.htm'`
do
echo $i
done

и его «вырезание» и присвоение переменной
man awk

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Когда я вижу повторяющуюся команду ...
Есть такая полезная команда
tee
, которая является тройником.
Она предназначена для размножения вывода.
 

Оффлайн 73

  • Автор темы
  • Новичок
  • *
  • Сообщений: 29
    • Просмотр профиля
2 RazrFalcon
СПАСИБО
Я разобрался с присвоением результатов работы команды переменной.
Оказывается, невнимательно посмотрел.
Нужно апостроф (возле клавиши 1), а не одинарные кавычки.

 

Страница сгенерирована за 0.102 секунд. Запросов: 24.