我已经在谷歌上搜索并尝试了5月份的建议,但似乎没有一个能够删除所有“DEFINER=”事件。
Remove DEFINER clause from MySQL Dumps
以下是一些事件
/*!50013 DEFINER=`root`@`localhost`*/
/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */
/*!50013 DEFINER=`root`@`192.168.42.20` SQL SECURITY DEFINER */
我尝试了另一种方法,尝试将所有内容替换到第一个空格,虽然regex在regex101上工作,但在命令行中sed不工作:
cat mydb.sql | grep DEFINER= | sed -e 's/DEFINER=[^\s]+/ /'
关于如何让这个和sed一起工作有什么建议吗?
编辑
在查看了这个巨大的转储文件之后,我还发现som出现在结尾没有空格的地方,而是有一个*,因此我更新了上面的测试文本。
这似乎是有效的:
's/DEFINER=[^ |\*]*//'
最佳答案
您不需要使用cat
或grep
。试试这个:
$ sed -e 's/DEFINER=[^[:space:]]\+ //' mydb.sql
/*!50013 `root`@`localhost` SQL SECURITY DEFINER */
/*!50013 `root`@`%` SQL SECURITY DEFINER */
/*!50013 `root`@`192.168.42.20` SQL SECURITY DEFINER */
/*!50003 CREATE OR REPLACE*/ /*!50017 */ /*!50003 TRIGGER WORKORDER_BU BEFORE UPDATE ON WORK_ORDER
要就地编辑文件,请使用
-i
选项:$ sed -i 's/DEFINER=[^[:space:]]\+ //' mydb.sql
使用模式
[^\s]+
,搜索一个非空格字符[^\s]
,后跟+
符号。要将一个或多个字符与+
匹配,必须在BRE模式下对其进行转义:sed -e 's/DEFINER=[^[:space:]]\+ //' mydb.sql
此外,character类
\+
i是GNU扩展,可能无法在您的系统上工作。使用\s
代替(或[:space:]
只匹配空格和制表符)。关于mysql - sed从sql dump中删除DEFINER,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38691087/