заменить <img> на <img>
От: CR-LF Россия  
Дата: 09.12.05 18:39
Оценка:
Hi all,
Скажите плиз:
есть куча html-файлов в разных каталогах,
в них есть <img src="имяфайла.gif" alt="комментарий">.
Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">,
чтобы не ручками ?
Posted via RSDN NNTP Server 2.0
Re: заменить <img> на <img>
От: Amidlokos Россия  
Дата: 09.12.05 18:43
Оценка:
Здравствуйте, CR-LF, Вы писали:

CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">,

CL>чтобы не ручками ?

О регулярных выражениях слышал? Действуй!

Сейчас попробую набросать...
WARNING: expression "to_be || !to_be" is always true
Re[2]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 09.12.05 18:56
Оценка:
> CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">,
> CL>чтобы не ручками ?
>
> О регулярных выражениях слышал? Действуй!
>
> Сейчас попробую набросать...
слышал, но не владею ;(
Posted via RSDN NNTP Server 2.0
Re: заменить <img> на <img>
От: Amidlokos Россия  
Дата: 09.12.05 19:08
Оценка:
Здравствуйте, 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
Re[2]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 09.12.05 19:18
Оценка:
>
> s/src="(.*)" alt="(.*)"/src="$1" alt="$1"/g
>

Так и че с этим делать-то ?
Posted via RSDN NNTP Server 2.0
Re: заменить <img> на <img>
От: dims12 http://www.relativity.ru
Дата: 09.12.05 19:23
Оценка:
Здравствуйте, CR-LF, Вы писали:

CL>Hi all,

CL>Скажите плиз:
CL>есть куча html-файлов в разных каталогах,
CL>в них есть <img src="имяфайла.gif" alt="комментарий">.
CL>Как во всех файлах сделать <img src="имяфайла.gif" alt="имяфайла.gif">,
CL>чтобы не ручками ?

Самый просто способ -- это использовать поиск и замену от Ворда.
Файлы надо переименовать в TXT, то есть, добиться, чтобы Ворд не открывал их по-умному, а открывал бы как текст.
Потом сделать поиск и замену по регулярным выражениям. Там справка есть, всё понятно.
Сначала составляешь выражение, которое находит теги. Потом в нём расставляешь скобки — обозначаешь области.
Потом составляешь выражение для замены, в котором ипользуешь номера областей.

Вот.
Re[2]: заменить <img> на <img>
От: Amidlokos Россия  
Дата: 09.12.05 19:29
Оценка:
Здравствуйте, dims12, Вы писали:

D>Вот.


Если нужно на один раз — то да, согласен
WARNING: expression "to_be || !to_be" is always true
Re[3]: заменить <img> на <img>
От: Amidlokos Россия  
Дата: 09.12.05 19:30
Оценка:
Здравствуйте, CR-LF, Вы писали:

>>
>> s/src="(.*)" alt="(.*)"/src="$1" alt="$1"/g
>>

CL>Так и че с этим делать-то ?

Натравить на текст чем-либо, поддерживающим перловские регуляры.

В данном случае первая s обозначает замену, последняя g — жадную обработку (т.е. всех вхождений).
WARNING: expression "to_be || !to_be" is always true
Re[4]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 09.12.05 19:37
Оценка:
"Amidlokos" <36062@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1531485@news.rsdn.ru...
> Здравствуйте, CR-LF, Вы писали:
>
>>>
>>> s/src="(.*)" alt="(.*)"/src="$1" alt="$1"/g
>>>

> CL>Так и че с этим делать-то ?
>
> Натравить на текст чем-либо, поддерживающим перловские регуляры.
Так мне все равно придется кажный файл открывать ?
Posted via RSDN NNTP Server 2.0
Re[2]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 09.12.05 20:18
Оценка:
> Самый просто способ -- это использовать поиск и замену от Ворда.
> Файлы надо переименовать в TXT, то есть, добиться, чтобы Ворд не открывал
> их по-умному, а открывал
>бы как текст.
> Потом сделать поиск и замену по регулярным выражениям. Там справка есть,
> всё понятно.
> Сначала составляешь выражение, которое находит теги. Потом в нём
> расставляешь скобки — обозначаешь
>области.
> Потом составляешь выражение для замены, в котором ипользуешь номера
> областей.
Не знаю где там то, о чем ты говоришь — открываешь Правка\Заменить,
появляется окошко, где есть "найти" и "заменить на".
И куда там писать эти регуляры ?
И в справке нихрена нет.
Наверное я савсем тупой.
Posted via RSDN NNTP Server 2.0
Re[3]: заменить <img> на <img>
От: vantuz  
Дата: 11.12.05 09:54
Оценка:
Тупой топорный способ замены:

% 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).

На CMD.EXE findstr, sed аналогично.
Re[4]: заменить <img> на <img>
От: voxel3d  
Дата: 11.12.05 11:43
Оценка:
Hello.

У sed появилась полезная опция -i позволяющая обойтись без промежуточных файлов.
У find есть опция -exec позволяющая обойтись без цикла.

Но это всё придирки, по сравнению с вариантом с использованием Word- a , это всё вполне ничего.


best regards..
Re[5]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 11.12.05 13:31
Оценка:
"voxel3d" <20383@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1532477@news.rsdn.ru...
> Hello.
>
> У sed появилась полезная опция -i позволяющая обойтись без промежуточных
> файлов.
> У find есть опция -exec позволяющая обойтись без цикла.
Это ты сейчас с кем разговаривал ?

> Но это всё придирки, по сравнению с вариантом с использованием Word- a

> , это всё вполне ничего.
Кстати, Word так и не получилось заставить сдулать subj — не понимает он
регуляров (а может и я чего-то не понимаю), а вот Microsoft Script Editor
подходит.
Кстати как его вызвать, чтобы не из Word'а ? А то че-то я не нашел
Posted via RSDN NNTP Server 2.0
Re[5]: заменить <img> на <img>
От: vantuz  
Дата: 11.12.05 13:34
Оценка:
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 тоже советую посмотреть. Удачи.
Re[7]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 11.12.05 13:53
Оценка:
> 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.
Re[4]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 11.12.05 14:28
Оценка:
"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 весит ?
А то я разорюсь на трафике
Posted via RSDN NNTP Server 2.0
Re[5]: заменить <img> на <img>
От: vantuz  
Дата: 11.12.05 19:37
Оценка:
CL>Так а скока этот cygwin весит ?

Зависит от кол-ва устанавливаемых пакетов. В минимальной установке, чтобы bash, fileutils, textutils заработали -- ~10 -20 Мб (???), точную цифру не знаю.
Re: заменить <img> на <img>
От: RomanHawk Россия  
Дата: 12.12.05 06:51
Оценка:
Здравствуйте, 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 <имя скрипта> <имя папки, в которой проводится замена>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.