【问题标题】:Shell script: send sed output to mysql?Shell 脚本:将 sed 输出发送到 mysql?
【发布时间】:2010-01-27 03:31:35
【问题描述】:

尝试将文本文件上 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

这里的正确解决方案是什么?

【问题讨论】:

    标签: mysql bash shell


    【解决方案1】:
    sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR
    

    【讨论】:

      【解决方案2】:
      sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:
          mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql)
          

          【讨论】:

            猜你喜欢
            • 2022-01-15
            • 2018-03-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-11
            • 2015-05-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多