2010-01-27 148 views
4

试图管上的一个文本文件中的sed替换的输出到MySQL,像这样: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 

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

回答

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

不需要输入重定向。 – ghostdog74 2010-01-27 05:13:48

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

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

在第二种情况下,您在mysql上使用文件重定向,除非您给它一个命令(在本例中为sed),这意味着shell可能试图打开[不存在的]文件在当前目录中命名为'sed'。下一个输入重定向可能会让它感到困惑,如果shell甚至可以解析它。

我相信(并投票)从gbacon的答案作为最简单的解决方案来实现我认为你想要的。

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

是的,这比接受的答案要好 – 2011-09-01 15:55:18