我试图将对文本文件进行 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
这里应该采用什么合适的解决方案?
sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR
sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR
为了更好地解释一下,命令行从左到右运行,除了输入重定向的情况。因此,你的第一个命令没有起作用是因为它将mysql的输出发送到sed,并尝试从文件'WAR.sql'中重定向输入到sed。
在第二种情况下,你正在对mysql进行文件重定向,但是你给它一个命令(在这种情况下是sed),这意味着shell可能会尝试在当前目录中打开一个[不存在的]名为'sed'的文件。下一个输入重定向可能只会让它更加困惑,如果shell甚至在解析中到达那里的话。
我认为(并投票支持)gbacon的答案是实现你想要的最简单的解决方案。
mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql)