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

Dec 05, 2014 10:39

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

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

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

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



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



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

Найти: .jpg
Заменить на: .jpg.">
и
Найти: http://
Заменить на:
Опция "Вид" --> "Перенос по словам" в меню
или в англоязычии:


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

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

ctrl + f

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



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

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

Notepad++, AkelPad и.п.

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

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

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

Как пример:

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











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

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

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

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



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

Получаем:


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

допустим, решили убить активные ссылки, которые любят подсовывать к кодам некоторые сервисы:




.... и в таком духе.

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

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

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

Найти: \w+/w_\d+\.net">
(\w+)\.jpg">

(\w+ - латинская буква, цифра или знак подчеркивания, одна или несколько)

Заменить на:
\1.jpg">



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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



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

В случае ЖЖ не придется переносить записи в локальные папки. Достаточно открыть пост
в режиме редактирования. Программа исправит все линки в выделенном тек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"
даже и с усиленным инструментарием - проблема. Но преодолимая.

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



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

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



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

Найти: (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))



Получаем очищенный список, в "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

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

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

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

abra kadabra  1 
  tyry pyry  1 
  klin blin  1 
  pryg skok  1

И так пятьдесят тысяч раз.

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

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

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

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

Заменить на: "httр://photo.qip.ru/photo/seкaphoto/200938981/large/\3.\4" "\1"  1

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

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

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

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



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

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



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



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

Примечание.
Если весь архив скинуть в одну папку на Я-фото - коды для исправления будут более единообразны,
в 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 , а пост превратился в закорючки! ..?
-В жж-шной форме редактирования бывают накладки. Видимо операция применялась к тексту,
который прежде уже находился в буфере, выход - чистить буфер перед новой операцией.



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

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

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

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

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



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

Прогулка по Облакам. Обзор

HTMLство, веб-штучки, фото-хосты

Previous post Next post
Up