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/ (обратите внимание на дополнительную обратную косую черту после символа равенства)
Вот одна вставка из одной строки файла SQL, которая содержит строку, которую я хочу заменить: http://pastebin.com/8G5mcxpJ

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

3 ответа

Решение

Нет необходимости в трубе cat в sed:

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

  • Удалить знак процента
  • Вам нужно только избежать косой черты
  • Укажите редактирование на месте (-i) если ты хочешь

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

sed 's#<a href=\\"/tag/#<a href="http://www.mydomain.com/tag/#' wordpress_posts.sql
$ cat wordpress_posts.sql | sed 's/\/tag\//http:\/\/www.mydomain.com\/tag\//' > wordpress_posts.sql
Другие вопросы по тегам