Заменить строку специальными символами - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь заменить следующую строку в файле WordPress SQL:

http:\\/\\/firstdomain.com\\/qwerty\\/wp-content\\/uploads\\/2018\\/07\\/section-shape.png

на

https:\\/\\/seconddomain.com\\/wp-content\\/uploads\\/2019\\/06\\/section-shape.png

Iпопробовал следующую команду, которая явно не работала

sed -i "s#'http:\\/\\/firstdomain.com\\/qwerty\\/wp-content\\/uploads\\/2018\\/07\\/section-shape.png'#'https:\\/\\/seconddomain.com\\/wp-content\\/uploads\\/2019\\/06\\/section-shape.png'#g" database.sql

Кто-то, пожалуйста, помогите понять, где я пропустил.Большое спасибо.

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Вы не можете серьезно применить sed к файлу .db, потому что ... ну, это файл базы данных, а не текст (скорее всего sqlite, кстати).

Вместо этого вы должны выполнить замену строки SQL-запросом (UPDATE) из консоли SQLite (или любого другого клиента SQL). Проверьте эту ссылку, например, для метода replace в SQLite.

0 голосов
/ 30 июня 2019

Ваша первая ошибка заключает ваш скрипт в двойные кавычки вместо одинарных, предлагая оболочке проанализировать его содержимое до того, как sed увидит его, и, таким образом, съедает один слой обратной косой черты.

Если вам приходится иметь дело с одинарными кавычками (которые вам не следует указывать в качестве примера, но в любом случае ...), никогда не делайте этого:

sed "s/foo'bar/stuff/"

сделать это вместо:

sed 's/foo'\''bar/stuff/'

поэтому оболочка не интерпретирует каждую часть вашего скрипта.

Помимо этого - sed не понимает буквальные строки (см. Можно ли надежно избежать метасимволов регулярных выражений с помощью sed ), поэтому вместо этого просто используйте инструмент, который это делает, например, AWK:

awk '
  BEGIN { old=ARGV[1]; new=ARGV[2]; ARGV[1]=ARGV[2]="" }
  s=index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
1' \
  'http:\\/\\/firstdomain.com\\/qwerty\\/wp-content\\/uploads\\/2018\\/07\\/section-shape.png' \
  'https:\\/\\/seconddomain.com\\/wp-content\\/uploads\\/2019\\/06\\/section-shape.png' \
  file
https:\\/\\/seconddomain.com\\/wp-content\\/uploads\\/2019\\/06\\/section-shape.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...