我正在尝试在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
我尝试了以下显然不起作用的命令
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
请有人帮助了解我错过的地方。非常感谢。
答案 0 :(得分:1)
您不能将sed
应用于.db
文件,因为...好吧,它是数据库文件而不是文本(顺便说一下,是sqlite)。
相反,您应该使用SQLite控制台(或您拥有的任何SQL客户端)中的(UPDATE)SQL查询执行字符串替换。例如,请检查此链接以获取SQLite中的replace
方法。
答案 1 :(得分:0)
您的第一个错误是将脚本用双引号而不是单引号引起来,从而邀请shell在sed看到它之前先解析其内容,从而吃掉一层反斜杠。
如果您必须处理单引号(不应该给您已发布的示例输入,但无论如何...),请不要这样做:
sed "s/foo'bar/stuff/"
改为执行此操作:
sed 's/foo'\''bar/stuff/'
因此shell不会解释脚本的每个部分。
除此之外-sed不能理解文字字符串(请参见Is it possible to escape regex metacharacters reliably with 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