paldig
paldig

Reputation: 1

Replace string with special characters

I'm trying to replace the following string in a wordpress sql file:

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

to

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

I tried the following command which obviously didn't work

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

Someone please help to understand where I missed. Thank you very much.

Upvotes: 0

Views: 147

Answers (2)

Ed Morton
Ed Morton

Reputation: 203665

Your first mistake is enclosing your script in double quotes instead of single, thereby inviting the shell to parse its contents before sed gets to see it and thus eating up one layer of backslashes.

If you have to deal with single quotes (which you shouldn't given your posted sample input but anyway...) never do this:

sed "s/foo'bar/stuff/"

do this instead:

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

so the shell isn't interpreting every part of your script.

Beyond that - sed doesn't understand literal strings (see Is it possible to escape regex metacharacters reliably with sed), so instead just use a tool that does, e.g. 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

Upvotes: 0

Lucas
Lucas

Reputation: 2093

You can't seriously apply a sed to a .db file because... well, it's database file not text (most likely sqlite by the way).

Instead, you should perform the string replacement with an (UPDATE) SQL query from the SQLite console (or whatever SQL client you have). Check this link for the replace method in SQLite for example.

Upvotes: 1

Related Questions