如何用sed替换SQL文件中的字符串

时间:2015-01-21 16:33:57

标签: regex bash sed

我有一个多站点WordPress安装,它包含我工作的公司的几个站点,并且我已经生成了一个bash脚本,它分别为每个站点提取数据库表。

此外,我们根据每个副本的位置标题每个站点。在示例中,网站的本地副本名称为Site Title - Local,分段的标题为Site Title - Staging,制作类似Site Title

在我的脚本中,我可以使用以下sed命令来查找- Local并将其替换为- Staging

sed -i -e "s/\s\-\sLocal/\ \-\ Staging/g" ${staging_sql_file};

但以下内容无法删除字符串- Local

sed -i -e "s/ - Local//g" ${staging_sql_file};

我也尝试过以下模式:

"s/\s\-\sLocal//g"
"s/ \- Local//g"
"s/\s\-\sLocal/\s/g"
"s/ \- Local/ /g"

但这些都不起作用。

有人可以帮我解决这个问题吗?

更新#1

当我尝试上面显示的正则表达式时,我从sed收到错误。

更新#2

我的SQL文件如下:

LOCK TABLES `wp_16_options` WRITE;
/*!40000 ALTER TABLE `wp_16_options` DISABLE KEYS */;
INSERT INTO `wp_16_options` VALUES (1,'siteurl','https://www.site-url.com','yes'),(2,'home','https://www.site-url.com','yes'),(3,'blogname','Site Title - Local','yes'),(4,'blogdescription','Just another multi site wp site','yes'),(5,'users_can_register','0','yes'),...

2 个答案:

答案 0 :(得分:1)

[SO]$ cat file
Site Title - Local
Site Title - Staging
Site Title

[SO]$ sed 's/ - Local//g' file
Site Title
Site Title - Staging
Site Title

答案 1 :(得分:1)

试试这个sed:

sed -i.bak 's/[[:blank:]]*-[[:blank:]]*Local//g' "${staging_sql_file}"

即。使用POSIX类[[:blank:]]代替水平空格。