gpt4 book ai didi

mysql - sed 从 sql 转储中删除 DEFINER

转载 作者:行者123 更新时间:2023-11-29 01:37:07 24 4
gpt4 key购买 nike

我已经用谷歌搜索并尝试了很多建议,但似乎没有一个能够删除所有出现的“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 */

我尝试了一种不同的方法,尝试替换第一个空格之前的所有内容,而当正则表达式在 regex101 上工作时,它在 sed 命令行中不起作用:

cat mydb.sql | grep DEFINER= | sed -e 's/DEFINER=[^\s]+/ /'

关于如何让它与 sed 一起工作有什么建议吗?

编辑

在查看这个巨大的转储文件后,我还发现了一些末尾没有空格,而是有一个 * 的地方,所以我更新了上面的测试文本。

这似乎是可行的:

's/DEFINER=[^ |\*]*//'

最佳答案

您不需要使用 catgrep。试试这个:

$ 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

此外,字符类 \s i 作为 GNU sed 扩展,可能无法在您的系统上运行。使用 [:space:] 代替(或 [:blank:] 只匹配空格和制表符)。

关于mysql - sed 从 sql 转储中删除 DEFINER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com