Rimon Lusi (fotovivo) wrote,
Rimon Lusi
fotovivo

Category:

Заменить все ссылки в записях, реально?

"Лучше день провозиться, а потом за пять минут долететь"(с).

Мануал по find-replace для полного чайника


С QIP-а на Облака одним махом:
Грохнулся популярный сервис - объявил о закрытии, сотни блогерских страничек зияют прорезами вместо картинок.
Мало перенести архивы - нужно переписать все линки в постах.
Это реально.
В прежних экзерцисах мы изощрялись в автозамене кракозябр в линках на что-то вменяемое.
Но стараниями файлохранительных сервисов более востребованной становится замена одних кракозябр на другие.
Типа Облачных или тех же яндесовских.
Задача не тривиальная - переписать ссылки во всех постах, при хаотичной букво-цифири в адресах картинок.

Судя по прежним откликам, вариант с "заклинаниями", без пояснений, что откуда берется и почему,
не очень востребован. Те, кто заинтересовался, хотят разобраться в смысле производимых действий,
а не просто следовать готовому рецепту.
На этот раз попробуем начать "от сотворения мира".



Блокнот
Обычный виндозный. Notepad.
Вдруг кто-то не знает забыл: find-replace
(С учетом регистра - "Match case")

find-replace

Тоже кое-что может. Найти нужное и заменить более актуальным.
Напр. добавить соответствующие тэги ко всем ссылкам в тексте.
В два приема:

Найти: .jpg
Заменить на: .jpg.">
и
Найти: http://
Заменить на: <img src="http://

Уже не мало. Чем стопятьсот раз копи-пастить.

Примечание.
Опция "Вид" --> "Перенос по словам" в меню
или в англоязычии:
find-replace

пригодится при копировании напр. исходных кодов,
которые Блокнот вытянет в одну строку, если не поставить галочку.





Функция поиска в браузере

ctrl + f

Ищет и на обычной странице, и в редактируемой форме записи (когда пост еще не отправлен) и на странице исходных кодов.
Массовую замену в браузере не сделаешь, но поиск тоже бывает весьма полезен, особенно в длинных текстах и кодах -
по известному слову легко выходить на искомый абзац.

find-replace


◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘



Продвинутые Блокноты

Notepad++, AkelPad и.п.

Преобразования, чуть более изощренные, чем прямая замена, встречаются в задачах самых будничных и бесхитростных.
И в методах нет ничего непостижимого.

- Идею переменной никому ведь не надо объяснять. Классические иксы-игрики.

В Блокнотах-плюс подстановочные выражения используются для той же цели.

Как пример:

Изменить размеры картинок в кодах для вставки и убрать рамку.

<img src="httр://host-lost.cc/Gipegi/foto_10.jpg" weight="752px" height="901px" border="2px">
<img src="httр://host-lost.cc/Gipegi/foto_11.jpg" weight="754px" height="950px" border="5px">
<img src="httр://host-lost.cc/Gipegi/foto_12.jpg" weight="760px" height="911px" border="7px">
<img src="httр://host-lost.cc/Gipegi/foto_15.jpg" weight="754px" height="930px" border="1px">
<img src="httр://host-lost.cc/Gipegi/foto_36.jpg" weight="758px" height="923px" border="3px">


Все значения разные, простого "найти и заменить" не достаточно.

Запишем тоже самое, но с переменными - подстановками, или,
как они в соответствующих редакторах называются - регулярными выражениями, reg_exp-ами

Найти: foto_(\d+)\.jpg" weight="\d+px" height="\d+px" border="\d+px"

Заменить на: foto_\1.jpg" weight="400px" height="600px" border="0"

find-replace


\d+ - означает: в этой позиции находится одна или несколько цифр.
скобки(в данном случае) - выражению надлежит быть сохраненным для последующего использования.
\1 - вставить содержимое первых скобок.

Получаем:
find-replace




Или знакомое по прежним встречам с автозаменой упражнение - отредактировать адреса с абракадаброй:

допустим, решили убить активные ссылки, которые любят подсовывать к кодам некоторые сервисы:
<a href="httр://yafot/Kt0_TebYa_ProsI/l_689.net"><img src="httр://yand_fota/sX_Krok0Z_Yabr0.jpg"></a>
<a href="httр://yafot/Kt0_TebYa_ProsI/t_697.net"><img src="httр://yand_fota/sX_Krok0Z_YabrL.jpg"></a>
.... и в таком духе.

Удалить закрывающие </a> легко: строку "Заменить на:" оставить пустой.

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

С "переменными" -- все просто:
командой: "Убрать всё между <a href и следующей закрывающей угловой скобкой. Включительно."


Найти: <a href="httр://yafot/\w+/w_\d+\.net"><img src="httр://yand_fota/(\w+)\.jpg"></a>
(\w+ - латинская буква, цифра или знак подчеркивания, одна или несколько)

Заменить на: <img src="httр://yand_fota/\1.jpg">

find-replace


World такое тоже умеет, формат написания подстановочных выражений у разных программ отличается,
есть несколько версий, но суть та же. Один раз освоишь - разберешься и с другими;
смотришь в подсказки, где какие символы в ходу, наизусть запоминать не обязательно.


Это было краткое повторение пройденного.

◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘



Групповые преобразования файлов

Зыбкая природа сетевых обиталищ подкидывает проблемы, которые с наскока не решить,
даже вооружившись "рег-экспами".

Недавние советы по переселению фотоархива на новый ресурс содержали непременное условие -
выберите тот, который сохраняет имена файлов; где линки будут иметь предсказуемый вид.

Увы. Таких практически не осталось - чтоб и целым архивом залить и новые ссылки выгрузить разом.
Выбирать приходится из возможного. Среди возможного несколько доступных Облачных сервисов и Я-фотки.

Одно крокозябрей другого.

Т.е. обе стороны соотношения "Заменить что:" -- "Заменить чем:" содержат неизвестные. Типа Х+Y=>a+b


Возьмем самый тяжелый случай, Яндекс-фото -
дает файлам имена вне какой-либо связи с исходными именами картинок
(на мой взгляд переезжать на Я-ф - менять шило на мыло в смысле надежности,
но многих привлекает привычный интерфейс, не ограничено места и, главное -
адреса можно получить пакетом, а не выковыривать по одному).

Пучок невнятных ссылок нужно расставить по текстам давних постов -
труднопредставимо каким образом это делать даже в ручную, сверять каждую с изображением? 0_о

Тем интересней, чем неразрешимей )

Нужен более мощный инструмент, чем Блокноты, даже расширенные.

И такой инструмент есть: UV FilesCorrector


Много чего делает на тему "Найти и заменить", с регулярными выражениями, если надо.
Только выражений для замены может быть не одно, как в Акел-паде, а несколько -тысяч.

find-replace


Например понадобилось во всех каталогах и подкаталогах перебить цены,
заменить доллары на евро, а рубли на юани буквы на значки:

руб. - Р
у.е. - $
евр. - €
шек.- ₪
юань - 圓
....


Жмем в меню "Добавить", вносим одну за другой пары - что на что меняем и
получаем список замен столбиком (который можно "Загрузить" - сохранив на следующий раз):

find-replace


А кроме того, сами исправляемые тексты не требуется никуда копипастить, вставлять в программу -
нужно просто указать ей путь к файлу. Или к каталогу с файлами и они, при необходимости,
будут исправлены все разом.

В случае ЖЖ не придется переносить записи в локальные папки. Достаточно открыть пост
в режиме редактирования. Программа исправит все линки в выделенном текcте - прямо в браузере.

Для чего ее, конечно, следует соответствующим образом настроить: задать список замен.



Поменять адреса вида
"httр://photo.qip.ru/photo/seкaphoto/200938981/large/217860960.jpg"
на
"httрs://img-fotki.yandex.ru/get/6305/11038107.8/0_5f84b_cea97f41_orig.jpg"
даже и с усиленным инструментарием - проблема. Но преодолимая.


Вернемся к Яндексу. В таком виде как он выдает ссылки - случай безнадежный.

find-replace


Но есть способ связать полученные имена с исходными - присмотритесь,
по наведению мыши превьюшки показывают всплывающую подсказку - с родным именем картинки! "титлы" те самые.

А чтоб извлечь их - не поленимся залезть на страницу исходных кодов. ctrl+U
Не так все страшно. Вот он искомый фрагмент (начиная со слов "Выделить фотографии:")

find-replace



Составим команду для извлечения нужных кодов из этой каши:

Найти: (httрs://img-fotki(.(?!XS))*)_XS"\s\S*\s\S*\s(alt="\w+\.(jpg|gif)")(.(?!ttps))*

(Найди череду символов, начинающуюся с httрs://img-fotki - после которых идет какой угодно символ (.) сколько угодно раз (*), кроме такого, за которым стоит XS; дальше найди _XS" пробел (\s), несколько символов не являющихся пробелом (\S*), еще раз (\s\S*\s ) и
группу из alt=", одной или нескольких букв/цифр (w+) с расширениями на выбор; дальше найди сколько угодно каких угодно символов (.), пока не наткнешься на такой, за которым стоит ttрs (?!) )

Если к составляемым reg_exp-выражениям не делать комментариев - уже через пару недель будет не разобрать, что там к чему


Заменить на: \1_orig.jpg \3\n

(Запомни содержимое первой и третьей скобок (внутренние считаются (кроме тех, что входят в шаблон с "?!")) и припиши к нему _orig.jpg, в конце сделай перевод строки (\n))

find-replace


Получаем очищенный список, в "alt-ах" - прежние номера фот,
связывающие новые адреса с теми, что уже используются в постах

httрs://img-fotki.yandex.ru/get/6305/11038107.8/0_5f84b_cea97f41_orig.jpg alt="217860960.jpg"
httрs://img-fotki.yandex.ru/get/6210/11038107.8/0_5f84c_bb64f5bf_orig.jpg alt="217860961.jpg"
httрs://img-fotki.yandex.ru/get/6311/11038107.8/0_5f84d_a9d01408_orig.jpg alt="217860962.jpg"
httрs://img-fotki.yandex.ru/get/6309/11038107.8/0_5f84e_1ff3d0f3_orig.jpg alt="217860963.jpg"
httрs://img-fotki.yandex.ru/get/6308/11038107.8/0_5f84f_5f7050f1_orig.jpg alt="217860964.jpg"
httрs://img-fotki.yandex.ru/get/6111/11038107.8/0_5f850_23a2be0b_orig.jpg alt="217860965.jpg"
httрs://img-fotki.yandex.ru/get/6306/11038107.8/0_5f851_84c74e48_orig.jpg alt="217860966.jpg"
httрs://img-fotki.yandex.ru/get/6306/11038107.8/0_5f852_84eabdbd_orig.jpg alt="217860967.jpg"
httрs://img-fotki.yandex.ru/get/6211/11038107.8/0_5f853_5a201ac6_orig.jpg alt="217860968.jpg"
httрs://img-fotki.yandex.ru/get/6305/11038107.8/0_5f84a_24c56497_orig.jpg alt="217860968.jpg"
httрs://img-fotki.yandex.ru/get/6212/11038107.8/0_5f854_30e3f7d2_orig.jpg alt="217860970.jpg"


Нам нужно произвести замену выражения перед заданным именем
вместо httр://photo.qip.ru/photo/seкaphoto/200938981/large/217860960
вписать httрs://img-fotki.yandex.ru/get/6305/11038107.8/0_5f84b_cea97f41_orig.jpg alt="217860960

Даже хитрых подстановочных выражений не нужно.
Беда, что таких операций требуется несколько десятков(/тысяч).

Программа-корректор с этим прекрасно справится,
нужно только скормить ей специально подготовленный файл со списком замен -

вроде такого:

<?xml version="1.0" encoding="windows-1251"?>
<List xml:space="preserve">
  <Item> <Find>abra</Find> <Replace>kadabra</Replace>  <Checked>1</Checked>  </Item>
  <Item> <Find>tyry</Find> <Replace>pyry</Replace>  <Checked>1</Checked>  </Item>
  <Item> <Find>klin</Find> <Replace>blin</Replace>  <Checked>1</Checked>  </Item>
  <Item> <Find>pryg</Find> <Replace>skok</Replace>  <Checked>1</Checked>  </Item>
</List>
И так пятьдесят тысяч раз.

- знакомые Find и Replace, только в программных кодах.



регулярки AkelPad-овские у нас под рукой, придать списку ссылок нужное для программы обрамление не долго:


Найти: (httрs://img-fotki.*) (alt="(\d+)\.(jpg|gif)")

-найти имя джипега/гифа (\d+) перед которым стоит выражение с httрs: , еще кучей символов и alt="

Заменить на: <item><find>"httр://photo.qip.ru/photo/seкaphoto/200938981/large/\3.\4"</Find> <replace>"\1"</Replace>  <checked>1</Checked>  </Item>

-заменить то, что перед номером картинки (скобка №3, считая вложенные) на выражение
<item><find>httр://photo.qip.... и прочая, и в указанное место вставить саму исходную строку (первая скобка)


(Тут и пригодились alt-ы с номерами картинок, чтоб связать новые адреса со старыми.
Иначе пришлось бы отслеживать порядок загрузки и мутить с нумерацией списка.)

Список замен готов.

Сохраните полученный файл в Акел-Паде с расширением .lst (все файлы) в кодировке 1251 ANSI-Cyrillic.
Запомните путь к файлу(в какую папку положили), что бы открыть его в FileCorrector-е.

find-replace


(Замены и собственно F-Corrector проделает с не меньшим успехом,
но физически текст должен где-то находиться; можно набрать его Блокноте, а подстановки запустить из FC)



Всё готово, открываем сохраненный список уже из самой программы (кнопка "Добавить из файла") ,
заходим в нужный пост (удобнее всего из "управления записями" вверху ЖЖ-страницы)
--> ctrl A --> Ctrl + Shift + X и вуаля!

find-replace


Т.е. выделили текст поста, нажали сочетание Ctrl + Shift + X (при запущенной программе uFC, разумеется)
- имеем результат:

find-replace



Не совсем одним махом получилось, в три прыжка, но все ж таки обозримый объем работы,
без автоматизации вовсе неподъемный.


Примечание.
Если весь архив скинуть в одну папку на Я-фото - коды для исправления будут более единообразны,
в qip-ких адресах аналогично, если фоты хранились в разных альбомах, следует учесть это при составлении списка замен:
httр://photo.qip.ru/photo/куshi/200703298/large/213216821.jpg
httр://photo.qip.ru/photo/куshi/200683461/large/211744274.jpg

Индекс папки из девяти цифр обозначим переменной:
httр://photo.qip.ru/photo/куshi/\d+/large/211744274.jpg


....... ....... ....... ....... ....... ....... ....... ....... .......


- Обязательно файл вручную конструировать, автоматом программа этого не делает?
- Делает, если пары "что" -" чем" вносить через вкладку "Добавить" - по одной, и запомнить полученное в файл.
Загрузить список - только вот таким способом.

◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘


Лирика

Есть два принципа работы в неосвоенной области.
Метод "тупо проделать то, что описано в инструкции" не так плох, как может показаться.
Приложений и устройств всё больше, досконально разобраться во всем невозможно. И наперед не известно -
стоит ли; если утилита нужна для разовой операции - включаем и едем, а как оно устроено, не докапываемся.
Минус такого подхода в том, что если что-то пойдет не как надо, то не будешь знать в чем загвоздка,
на любой ерунде можно споткнуться. В Справке есть далеко не все, а мануалов не густо.
Но может и повезти - "попробуй и получится, а если не получится попробуешь опять" =)

Например встречается ситуация:
-Я проделал Ctrl + Shift + X , а пост превратился в закорючки! ..?
-В жж-шной форме редактирования бывают накладки. Видимо операция применялась к тексту,
который прежде уже находился в буфере, выход - чистить буфер перед новой операцией.


find-replace


Неувязки возможны, но откатить просто -
вернуться на страницу журнала, пост останется неотредактированным, в первозданном состоянии;
нажимать "Сохранить запись" стоит только убедившись, что с текстом все в порядке.


Если же иметь дело с текстовыми материалами, правками и заменами предполагается часто и регулярно,
то, конечно, нет ничего лучше, чем освоить и настроить под себя удобный, функциональный инструмент.
"Непонятное" по большей части оказывается неизвестным.
Как при изучении языка: встретил новое слово - смотришь в словаре.
Наткнувшись на какой-нибудь "нежадный поиск" - приходим в недоумение и опускаем руки спрашиваем
у Гугла что оно такое. Обнаруживается интересная штука, полезная.



Бывает еще типа третий метод, как у lorique живописано в Аптечном инструктаже;
скажем, юзер не понимает разницы между кодом для вставки и именем файла -
но не роется в справочнике и не повторяет шаг за шагом готовый рецепт,
а с ходу принимается спорить: "а там не то, там вот это!", "но я не понимаю, тут так не получится".

На случай, если - что так, что эдак: никак, самый верный путь - попросить кого-то, кто хоть как-то.


◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘ * ◘◘◘◘◘◘



find-replace


Эквилибристика автозамены в более ранних постах:
Запасной аэродром для фоток с Яндекса
Групповые преобразования в ЖЖ
GRAB'им фликр, гугло-пикасу + обзор фото-хостов

Прогулка по Облакам. Обзор
Tags: HTMLство, веб-штучки, фото-хосты
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 91 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →