我有一个包含各种使用和更新命令的大型查询文件。我想换衣服 update
至 insert...on duplicate key update
.
query.sql文件示例:
use database;
UPDATE table
SET value = '{"courseAuthor":"Company","courseCode":"ABCD1234"}'
WHERE id = 12;
我可以在电脑上找到/替换 UPDATE table
所以它变成了 INSERT INTO table (id, value)
但需要替换下两行,使其成为:
VALUES( 12, '{"courseAuthor":"Company","courseCode":"ABCD1234"}')
ON DUPLICATE KEY UPDATE value = '{"courseAuthor":"Company","courseCode":"ABCD1234"}';
我的命令如下
sed -Eni '' '/SET/ N; s|SET value = (.*) WHERE id = (.*);|VALUES (\2, \1)\\\nON DUPLICATE KEY UPDATE value = \1;|g' query.sql
我的问题是,当我在macos上运行它时,query.sql文件被完全删除。关于我做错了什么有什么建议吗?
1条答案
按热度按时间ha5z0ras1#
在这个过程中有两个问题
sed
脚本。你用过-n
禁止自动打印,但没有在中打印任何内容的指令sed
脚本,因此没有输出。以及使用-i
对于就地编辑,只需清空文件即可。你需要加上p
用于打印。它也不匹配任何内容,因为您已经将第二行输入读取到模式空间中,但尝试匹配有换行符的空间。我已经换了
与
\n
得到了,或者:或:
两者的区别在于。成功替换后的旧照片(仅限)。后者即使线路没有改变。如果一条线
SET
本来应该匹配的,但我没有。诚然,regex看起来确实有点脆弱,但希望输入格式足够严格。