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 <имя скрипта> <имя папки, в которой проводится замена>
Здравствуйте, CR-LF, Вы писали:
>> А что бы Вам Windows Scripting Host не использовать? CL>Да уж ... CL>Куда проще. CL>Хотя проще было бы на паскале написать
Можно и на Паскале.
Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был написан за 15 минут включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный обход дерева каталогов, перевести в bat файл. Просто не хотелось огород городить.
Вообще если у вас есть Visual Studio, то можно воспользоваться функцией Find In Files. Она поддерживает регулярные выражения (синтаксис немного отличается от JavaScript) и позволяет проводить замену в нескольких файлах.
> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был > написан за 15 минут >включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный >обход дерева каталогов, >перевести в bat файл.
Вообще-то я WSH не владею, но насколько знаю оно было сделано в качестве
замены bat-файлам
Здравствуйте, CR-LF, Вы писали:
>> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был >> написан за 15 минут >>включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный >>обход дерева каталогов, >>перевести в bat файл. CL>Вообще-то я WSH не владею, но насколько знаю оно было сделано в качестве
Ну так овладевайте
CL>замены bat-файлам
Не спорю. Тем не менее, рекурсивный обход дерева каталогов в bat файле (с расширенным синтаксисом) занимает одну строку кода (см. команду for с параметром /R).
В WSH такую функцию надо писать руками (правда один раз написал — и пользуйся).
>>> Честно говоря, в Вашем вопросе больших сложностей не вижу. Этот код был >>> написан за 15 минут >>>включая отладку. Можно ещё проще, если часть, отвечающую за рекурсивный >>>обход дерева каталогов, >>>перевести в bat файл. > CL>Вообще-то я WSH не владею, но насколько знаю оно было сделано в > качестве > > Ну так овладевайте
Ну так, блин, тут не знаешь за что в первую очередь взяться.
А как отлаживать всю эту байду?
> Не спорю. Тем не менее, рекурсивный обход дерева каталогов в bat файле (с > расширенным синтаксисом) >занимает одну строку кода (см. команду for с параметром /R). > > В WSH такую функцию надо писать руками (правда один раз написал — и > пользуйся).
А в bat, надо два раза написать ?
>> 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 или еще чего-нибудь.
А>Ну вы млин товарисчи и написали! Аж волосы дыбом встают! А>Зачем такие извращения для выполнения такой простой операции??? Для этого достаточно возможностей более-менее толкового тесктового редактора, ну или на худой конец какой-нибудь студии.
Вот оно как. Для простого поиска файлов и замены в них уже нужно ставить отдельный редактор или даже ``студию''.
``Толковый'' редактор, оказывается, должен уметь не только редактировать текст, а еще и заменять собой командную оболочку. А CMD.EXE, etc. не нужны.
Автору темы: посмотрите здесь описание консольных команд Windows, очень поможет в жизни:
Здравствуйте, Аноним, Вы писали:
А>Вот оно как. Для простого поиска файлов и замены в них уже нужно ставить отдельный редактор или даже ``студию''.
Зачем ставить? Просто со временем (как мне кажется) подавляющее большинство компьютерщиков приходят к выводу, что блокнот — не самый удобный текстовый редактор, вы не находите? Кто к такому выводу в свое время уже пришел — у него уже давно стоит.
А по поводу "ставить студию" — ну это просто смешно. Она у вас не стоит?? Ну неужели когда вам дают существующий немаленький проект на доработку вы пользуетесь windows explorer'ом и блокнотом? Могу себе представить производительность...
А>``Толковый'' редактор, оказывается, должен уметь не только редактировать текст, а еще и заменять собой командную оболочку. А CMD.EXE, etc. не нужны.
Ну зачем так утрировать?
А еще неплохо было бы иметь подсветку синтаксиса, макросы, поддержку indent'ов, регулярных выражений, а также другие часто встречающиеся функции, в число которых я включаю и поиск/замену в группе файлов.
А>Зачем ставить? Просто со временем (как мне кажется) подавляющее большинство компьютерщиков приходят к выводу, что блокнот — не самый удобный текстовый редактор, вы не находите?
Не самый. Регулярные выражения, например, не знает.
А>А по поводу "ставить студию" — ну это просто смешно. Она у вас не стоит??
Грамотно спроектированная ОС -- уже сама по себе ``студия'' (c)
>Ну неужели когда вам дают существующий немаленький проект на доработку вы пользуетесь windows explorer'ом и блокнотом?
Не пользуюсь. Пока хватает GNU toolchain + bash + textutils + vim.
А>А еще неплохо было бы иметь подсветку синтаксиса, макросы, поддержку indent'ов, регулярных выражений, а также другие часто встречающиеся функции, в число которых я включаю и поиск/замену в группе файлов.
Тогда еще + переименование файлов по шаблону, + автоматическое создание индексов, оглавлений и т.д., вплоть до варки кофе. Сколько вы функций не назовете, вам назовут еще одну, которая в редакторе не реализована. Значит, редактор должен иметь встроенный язык с доступом к функциям ОС, как emacs, например. Только это уже не редактор Не проще ли иметь командную оболочку вроде bash, а из редактора уметь ее запускать, с возможностью ввода/вывода из/в буфер редактора?
Здравствуйте, vantuz, Вы писали:
V>>GNU/Linux, не случайно.
V>Шутка, конечно. Основная моя рабочая среда -- голова + карандаш + бумага.
Со средой понятно. Да и ОСь в общем-то сомнений не вызывала, поскольку чувствовалась приверженность "пути UNIX".
А последние сообщения в этой ветви разговора всё больше и больше приближаются к священной войне.......
Во всем нужна мера, даже в том, чтобы соблюдать ее.
SL>Со средой понятно. Да и ОСь в общем-то сомнений не вызывала, поскольку чувствовалась приверженность "пути UNIX".
Не угадали. Больше времени проработал на VMS, она устроена ближе к NT, чем к UNIX. На Linux народ бежит сейчас в основном из-за дешевизны x86.
SL>А последние сообщения в этой ветви разговора всё больше и больше приближаются к священной войне.......
Кто-то сомневается, что простые задачи надо решать простыми средствами? Это вопрос эффетивности , а не веры.