заменить <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 <имя скрипта> <имя папки, в которой проводится замена>
Re[2]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 12.12.05 07:10
Оценка:
> А что бы Вам Windows Scripting Host не использовать?
Да уж ...
Куда проще.
Хотя проще было бы на паскале написать
Posted via RSDN NNTP Server 2.0
Re[3]: заменить <img> на <img>
От: RomanHawk Россия  
Дата: 12.12.05 07:15
Оценка:
Здравствуйте, CR-LF, Вы писали:

>> А что бы Вам Windows Scripting Host не использовать?

CL>Да уж ...
CL>Куда проще.
CL>Хотя проще было бы на паскале написать

Можно и на Паскале.
Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был написан за 15 минут включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный обход дерева каталогов, перевести в bat файл. Просто не хотелось огород городить.

Вообще если у вас есть Visual Studio, то можно воспользоваться функцией Find In Files. Она поддерживает регулярные выражения (синтаксис немного отличается от JavaScript) и позволяет проводить замену в нескольких файлах.
Re[4]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 12.12.05 07:20
Оценка:
> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был
> написан за 15 минут
>включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный
>обход дерева каталогов,
>перевести в bat файл.
Вообще-то я WSH не владею, но насколько знаю оно было сделано в качестве
замены bat-файлам
Posted via RSDN NNTP Server 2.0
Re[5]: заменить <img> на <img>
От: RomanHawk Россия  
Дата: 12.12.05 07:29
Оценка:
Здравствуйте, CR-LF, Вы писали:

>> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был

>> написан за 15 минут
>>включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный
>>обход дерева каталогов,
>>перевести в bat файл.
CL>Вообще-то я WSH не владею, но насколько знаю оно было сделано в качестве

Ну так овладевайте

CL>замены bat-файлам


Не спорю. Тем не менее, рекурсивный обход дерева каталогов в bat файле (с расширенным синтаксисом) занимает одну строку кода (см. команду for с параметром /R).

В WSH такую функцию надо писать руками (правда один раз написал — и пользуйся).
Re[6]: заменить <img> на <img>
От: CR-LF Россия  
Дата: 12.12.05 07:39
Оценка:
>>> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был
>>> написан за 15 минут
>>>включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный
>>>обход дерева каталогов,
>>>перевести в bat файл.
> CL>Вообще-то я WSH не владею, но насколько знаю оно было сделано в
> качестве
>
> Ну так овладевайте
Ну так, блин, тут не знаешь за что в первую очередь взяться.
А как отлаживать всю эту байду?

> Не спорю. Тем не менее, рекурсивный обход дерева каталогов в bat файле (с

> расширенным синтаксисом)
>занимает одну строку кода (см. команду for с параметром /R).
>
> В WSH такую функцию надо писать руками (правда один раз написал — и
> пользуйся).
А в bat, надо два раза написать ?
Posted via RSDN NNTP Server 2.0
Re[7]: заменить <img> на <img>
От: vantuz  
Дата: 12.12.05 13:59
Оценка:
>> CL>Вообще-то я WSH не владею, но насколько знаю оно было сделано в
>> качестве
>>
>> Ну так овладевайте

Стрельбой из пушки по воробьям.


CL>Ну так, блин, тут не знаешь за что в первую очередь взяться.


bat лучше напишите сначала в одну строчку.

Или поставьте bash + GNU textutils из cygwin -- это красивше и гибче CMD.

WSH, perl, VB, etc. для более серьезных задач, imho.
Re: заменить <img> на <img>
От: Аноним  
Дата: 13.12.05 01:51
Оценка:
Ну вы млин товарисчи и написали! Аж волосы дыбом встают!
Зачем такие извращения для выполнения такой простой операции??? Для этого достаточно возможностей более-менее толкового тесктового редактора, ну или на худой конец какой-нибудь студии.

1. Если вы кодите в какой-либо IDE, то поищите по ее функциям, если у нее таковой нет, советую посмотреть на другие IDE.
2. Если вы кодите в текстовом редакторе, то в нем тоже должна быть такая функция (Find in files / Replace in files). Если это что-то аля блокнот, то посмотрите в сторону EmEditor, UltraEdit или еще чего-нибудь.
Re[2]: заменить <img> на <img>
От: nervous2  
Дата: 13.12.05 11:51
Оценка:
А че за UltraEdit и где иго взять ?
Posted via RSDN NNTP Server 2.0
Re[2]: заменить <img> на <img>
От: Аноним  
Дата: 13.12.05 18:12
Оценка:
А>Ну вы млин товарисчи и написали! Аж волосы дыбом встают!
А>Зачем такие извращения для выполнения такой простой операции??? Для этого достаточно возможностей более-менее толкового тесктового редактора, ну или на худой конец какой-нибудь студии.

Вот оно как. Для простого поиска файлов и замены в них уже нужно ставить отдельный редактор или даже ``студию''.
``Толковый'' редактор, оказывается, должен уметь не только редактировать текст, а еще и заменять собой командную оболочку. А CMD.EXE, etc. не нужны.

Автору темы: посмотрите здесь описание консольных команд Windows, очень поможет в жизни:

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx
Re[3]: заменить <img> на <img>
От: vantuz  
Дата: 13.12.05 20:26
Оценка:
А> Автору темы: посмотрите здесь описание консольных команд Windows, очень поможет в жизни:

А> http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/ServerHelp/552ed70a-208d-48c4-8da8-2e27b530eac7.mspx


Или сюда: http://www.rsdn.ru/article/winshell/batanyca.xml
Автор(ы): Алексей Александров
Дата: 11.07.2005
Статья рассказывает о малоизвестных возможностях командного языка Windows.
Re[3]: заменить <img> на <img>
От: Аноним  
Дата: 14.12.05 10:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот оно как. Для простого поиска файлов и замены в них уже нужно ставить отдельный редактор или даже ``студию''.


Зачем ставить? Просто со временем (как мне кажется) подавляющее большинство компьютерщиков приходят к выводу, что блокнот — не самый удобный текстовый редактор, вы не находите? Кто к такому выводу в свое время уже пришел — у него уже давно стоит.
А по поводу "ставить студию" — ну это просто смешно. Она у вас не стоит?? Ну неужели когда вам дают существующий немаленький проект на доработку вы пользуетесь windows explorer'ом и блокнотом? Могу себе представить производительность...

А>``Толковый'' редактор, оказывается, должен уметь не только редактировать текст, а еще и заменять собой командную оболочку. А CMD.EXE, etc. не нужны.


Ну зачем так утрировать?
А еще неплохо было бы иметь подсветку синтаксиса, макросы, поддержку indent'ов, регулярных выражений, а также другие часто встречающиеся функции, в число которых я включаю и поиск/замену в группе файлов.
Re[4]: заменить <img> на <img>
От: vantuz  
Дата: 14.12.05 16:26
Оценка:
А>Зачем ставить? Просто со временем (как мне кажется) подавляющее большинство компьютерщиков приходят к выводу, что блокнот — не самый удобный текстовый редактор, вы не находите?

Не самый. Регулярные выражения, например, не знает.

А>А по поводу "ставить студию" — ну это просто смешно. Она у вас не стоит??


Грамотно спроектированная ОС -- уже сама по себе ``студия'' (c)

>Ну неужели когда вам дают существующий немаленький проект на доработку вы пользуетесь windows explorer'ом и блокнотом?


Не пользуюсь. Пока хватает GNU toolchain + bash + textutils + vim.

А>А еще неплохо было бы иметь подсветку синтаксиса, макросы, поддержку indent'ов, регулярных выражений, а также другие часто встречающиеся функции, в число которых я включаю и поиск/замену в группе файлов.


Тогда еще + переименование файлов по шаблону, + автоматическое создание индексов, оглавлений и т.д., вплоть до варки кофе. Сколько вы функций не назовете, вам назовут еще одну, которая в редакторе не реализована. Значит, редактор должен иметь встроенный язык с доступом к функциям ОС, как emacs, например. Только это уже не редактор Не проще ли иметь командную оболочку вроде bash, а из редактора уметь ее запускать, с возможностью ввода/вывода из/в буфер редактора?
Re[5]: заменить <img> на <img>
От: SeLarin Россия http://selarin.livejournal.com
Дата: 14.12.05 20:01
Оценка:
Здравствуйте, vantuz, Вы писали:

Извини, а твоя основная рабочая ОС случайно не Linux?


Если вещь не годна для одной цели, ее можно употребить для другой. // Лао цзы
Re[6]: заменить <img> на <img>
От: vantuz  
Дата: 14.12.05 21:31
Оценка:
SL>Извини, а твоя основная рабочая ОС случайно не Linux?

GNU/Linux, не случайно.
Re[7]: заменить <img> на <img>
От: vantuz  
Дата: 14.12.05 21:36
Оценка:
SL>>Извини, а твоя основная рабочая ОС случайно не Linux?

V>GNU/Linux, не случайно.


Шутка, конечно. Основная моя рабочая среда -- голова + карандаш + бумага.
Re[8]: заменить <img> на <img>
От: SeLarin Россия http://selarin.livejournal.com
Дата: 14.12.05 22:03
Оценка:
Здравствуйте, vantuz, Вы писали:

V>>GNU/Linux, не случайно.


V>Шутка, конечно. Основная моя рабочая среда -- голова + карандаш + бумага.


Со средой понятно. Да и ОСь в общем-то сомнений не вызывала, поскольку чувствовалась приверженность "пути UNIX".
А последние сообщения в этой ветви разговора всё больше и больше приближаются к священной войне.......


Во всем нужна мера, даже в том, чтобы соблюдать ее.
Re[9]: заменить <img> на <img>
От: vantuz  
Дата: 15.12.05 08:31
Оценка:
SL>Со средой понятно. Да и ОСь в общем-то сомнений не вызывала, поскольку чувствовалась приверженность "пути UNIX".

Не угадали. Больше времени проработал на VMS, она устроена ближе к NT, чем к UNIX. На Linux народ бежит сейчас в основном из-за дешевизны x86.

SL>А последние сообщения в этой ветви разговора всё больше и больше приближаются к священной войне.......


Кто-то сомневается, что простые задачи надо решать простыми средствами? Это вопрос эффетивности , а не веры.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.