Hi all,
Скажите плиз:
есть куча html-файлов в разных каталогах,
в них есть <img src="имяфайла.gif" alt="комментарий">.
Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">,
чтобы не ручками ?
> CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">, > CL>чтобы не ручками ? > > О регулярных выражениях слышал? Действуй! > > Сейчас попробую набросать...
слышал, но не владею ;(
Здравствуйте, CR-LF, Вы писали:
CL>Hi all, CL>Скажите плиз: CL>есть куча html-файлов в разных каталогах, CL>в них есть <img src="имяфайла.gif" alt="комментарий">. CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">, CL>чтобы не ручками ?
Ой, давненько не писал новые регуляры к великому своему стыду. Готовые юзал, позабыл уж всё. Но как-то так:
s/src="(.*)" alt="(.*)"/src="$1" alt="$1"/g
Специально убрал нечитаемое. Возможно, кавычки нужно будет экранировать с помощью "\". Да поправят меня лучше помнящие.
WARNING: expression "to_be || !to_be" is always true
Здравствуйте, CR-LF, Вы писали:
CL>Hi all, CL>Скажите плиз: CL>есть куча html-файлов в разных каталогах, CL>в них есть <img src="имяфайла.gif" alt="комментарий">. CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">, CL>чтобы не ручками ?
Самый просто способ -- это использовать поиск и замену от Ворда.
Файлы надо переименовать в TXT, то есть, добиться, чтобы Ворд не открывал их по-умному, а открывал бы как текст.
Потом сделать поиск и замену по регулярным выражениям. Там справка есть, всё понятно.
Сначала составляешь выражение, которое находит теги. Потом в нём расставляешь скобки — обозначаешь области.
Потом составляешь выражение для замены, в котором ипользуешь номера областей.
> CL>Так и че с этим делать-то ? > > Натравить на текст чем-либо, поддерживающим перловские регуляры.
Так мне все равно придется кажный файл открывать ?
> Самый просто способ -- это использовать поиск и замену от Ворда. > Файлы надо переименовать в TXT, то есть, добиться, чтобы Ворд не открывал > их по-умному, а открывал >бы как текст. > Потом сделать поиск и замену по регулярным выражениям. Там справка есть, > всё понятно. > Сначала составляешь выражение, которое находит теги. Потом в нём > расставляешь скобки — обозначаешь >области. > Потом составляешь выражение для замены, в котором ипользуешь номера > областей.
Не знаю где там то, о чем ты говоришь — открываешь Правка\Заменить,
появляется окошко, где есть "найти" и "заменить на".
И куда там писать эти регуляры ?
И в справке нихрена нет.
Наверное я савсем тупой.
"voxel3d" <20383@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1532477@news.rsdn.ru... > Hello. > > У sed появилась полезная опция -i позволяющая обойтись без промежуточных > файлов. > У find есть опция -exec позволяющая обойтись без цикла.
Это ты сейчас с кем разговаривал ?
> Но это всё придирки, по сравнению с вариантом с использованием Word- a > , это всё вполне ничего.
Кстати, Word так и не получилось заставить сдулать subj — не понимает он
регуляров (а может и я чего-то не понимаю), а вот Microsoft Script Editor
подходит.
Кстати как его вызвать, чтобы не из Word'а ? А то че-то я не нашел
V>У sed появилась полезная опция -i позволяющая обойтись без промежуточных файлов. V>У find есть опция -exec позволяющая обойтись без цикла.
Спасибо. Без этого -i find ... -exec красиво не используешь.
Re[6]: заменить <img> на <img>
От:
Аноним
Дата:
11.12.05 13:46
Оценка:
>> У sed появилась полезная опция -i позволяющая обойтись без промежуточных >> файлов. >> У find есть опция -exec позволяющая обойтись без цикла.
CL>Это ты сейчас с кем разговаривал ?
Со мной, видимо.
CR-LF, все же посмотрите внимательно на cygwin, bash + утилитки оттуда хорошо работают на подобных задачках.
На findstr и другие консольные программы из Windows тоже советую посмотреть. Удачи.
> CR-LF, все же посмотрите внимательно на cygwin, bash + утилитки оттуда > хорошо работают на подобных >задачках. > > На findstr и другие консольные программы из Windows тоже советую > посмотреть. Удачи.
findstr посмотрел поверхностно.
Не понял тока может ли она делать замену строк
Posted via RSDN NNTP Server 2.0
Re[8]: заменить <img> на <img>
От:
Аноним
Дата:
11.12.05 14:00
Оценка:
CL>findstr посмотрел поверхностно. CL>Не понял тока может ли она делать замену строк
Замену не делает. Для замены нужен, например, sed.
"vantuz" <49044@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:1532412@news.rsdn.ru... > Тупой топорный способ замены: > > % for name in `find . -name '*.htm*'` ; do sed 's/<img > [ ]*src=\"\([^\"]\+\)\" [ ]*alt=\"[^\"]*\">/<img src=\"\1\" alt=\"\1\">/' > $name > ~/tmp/tmp.html ; mv ~/tmp/tmp.html $name ; done > > Нужны bash, find, sed (для Windows см. http://cygwin.com).
Так а скока этот cygwin весит ?
А то я разорюсь на трафике
Зависит от кол-ва устанавливаемых пакетов. В минимальной установке, чтобы bash, fileutils, textutils заработали -- ~10 -20 Мб (???), точную цифру не знаю.
Здравствуйте, CR-LF, Вы писали:
CL>Hi all, CL>Скажите плиз: CL>есть куча html-файлов в разных каталогах, CL>в них есть <img src="имяфайла.gif" alt="комментарий">. CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">, CL>чтобы не ручками ?
А что бы Вам Windows Scripting Host не использовать?
function recurseFolder(folder) {
// Для всех файлов выполняем замену
var files = new Enumerator(folder.Files)
for (;!files.atEnd(); files.moveNext()) {
// Проверяем расширение файла (htm или html)
if (files.item().name.match(/\.html?$/)) {
processFile(files.item());
}
}
// Рекурсивно выполнеям функцию для всех подпапок
var childFolder = new Enumerator(folder.SubFolders);
for (;!childFolder.atEnd(); childFolder.moveNext()) {
recurseFolder(childFolder.item());
}
}
function processFile(file) {
var READING = 1;
var WRITING = 2;
// Считываем сдержимое файла
var stream = file.OpenAsTextStream(READING);
var content = stream.ReadAll();
// Проведём замену
var regExp = /\<img\s+src="(.*)"\s+alt=".*"\s*\>/g;
content = content.replace(regExp, '<img src="$1" alt="$1">');
// Сохраняем результат замены
stream = file.OpenAsTextStream(WRITING);
stream.Write(content);
};
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
// Параметр - имя папки, в которой проводить замену
if (WScript.Arguments.length) {
var folderName = WScript.Arguments(0);
recurseFolder(fileSystem.GetFolder(folderName));
}
else {
WScript.Echo("Укажите папку, в которой необходимо рекурсивно провести замену")
}
Для запуска
cscript <имя скрипта> <имя папки, в которой проводится замена>