Shell脚本:如何将sed命令的输出发送到MySQL?

5

我试图将对文本文件进行 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个回答

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

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

1

为了更好地解释一下,命令行从左到右运行,除了输入重定向的情况。因此,你的第一个命令没有起作用是因为它将mysql的输出发送到sed,并尝试从文件'WAR.sql'中重定向输入到sed。

在第二种情况下,你正在对mysql进行文件重定向,但是你给它一个命令(在这种情况下是sed),这意味着shell可能会尝试在当前目录中打开一个[不存在的]名为'sed'的文件。下一个输入重定向可能只会让它更加困惑,如果shell甚至在解析中到达那里的话。

我认为(并投票支持)gbacon的答案是实现你想要的最简单的解决方案。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接