shell脚本:将sed输出发送到mysql?

时间:2010-01-27 03:31:35

标签: mysql bash shell

尝试将文本文件上的sed替换的输出传输到MySQL,如下所示:

mysql -D WAR | sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql

那不行。也不是:

mysql -D WAR < sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql

这里有什么合适的解决方案?

4 个答案:

答案 0 :(得分:7)

sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR

答案 1 :(得分:5)

sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR

答案 2 :(得分:1)

为了解释一下,命令行从左到右运行,除了重定向输入的情况。所以,你的第一个不起作用的原因是因为它正在获取mysql的OUTPUT并将其发送到sed,以及尝试将输入从文件'WAR.sql'重定向到sed。

在第二种情况下,你在mysql上使用文件重定向,除了你给它一个命令(在本例中是sed),这意味着shell可能试图打开一个名为[不存在的]文件'sed'在当前目录中。下一个输入重定向可能只是混淆了它,如果shell在解析时甚至那么远。

我相信(并投票赞成)gbacon的答案是实现我想你想要的最简单的解决方案。

答案 3 :(得分:0)

mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql)