Назад | Перейти на главную страницу

sed заменить текст - escape-символы

У меня есть файл mysqldump, в котором я хочу заменить следующий текст <a href="/tag/ с участием <a href="http://www.mydomain.com/tag/ но не могу найти способ правильно экранировать все специальные символы.

Я использую следующую команду (+ еще несколько вариантов)
cat wordpress_posts.sql | sed 's%/<a href="\/\tag\/\/<a href="\http:/\/\www.mydomain.com/\tag/\/%g' > wordpress_posts_new.sql
но это не работает.

Кто-нибудь может помочь?

Обновление 1: оказывается, что исходная строка в mysqldump не <a href="/tag/ но <a href=\"/tag/ (обратите внимание на дополнительную обратную косую черту после символа равенства)
Вот pastebin одной строки файла SQL, который содержит строку, которую я хочу заменить: http://pastebin.com/8G5mcxpJ

Я пробовал все 3 предложенные версии команды sed, но ни одна из них не заменила указанную выше строку на <a href=\"http://www.mydomain.com/tag/ (да, я добавил обратную косую черту после символа равенства)

Вам не нужно убегать /, вы можете просто использовать любой другой разделитель:

sed 's#<a href=\\"/tag/#<a href="http://www.mydomain.com/tag/#' wordpress_posts.sql

Не нужно трубить cat к sed:

$ sed 's/<a href="\/tag\//<a href="http:\/\/www.mydomain.com\/tag\//g' wordpress_posts.sql

  • Убрать знак процента
  • Вам нужно только избежать косой черты
  • Укажите редактирование на месте (-i) если вы хотите
$ cat wordpress_posts.sql | sed 's/\/tag\//http:\/\/www.mydomain.com\/tag\//' > wordpress_posts.sql