【问题标题】:how to shell script write multi line text to file read from mysql?如何shell脚本将多行文本写入从mysql读取的文件?
【发布时间】:2016-07-17 00:46:07
【问题描述】:

我在编写 shell 脚本时遇到了问题。我在数据库中有一个表,其中有一个文本字段。我需要将该字段写入文件。

数据库字段为 id、file_name、text

这是我的脚本

#!/bin/bash
while read -a row
do
cat <<EOF >/root/${row[1]}
${row[2]}
EOF
sleep 1
done < <(echo "SELECT * FROM installation WHERE status = 1" | mysql -h 127.0.0.1 -u root -padmin -D data -s)

我试过了

echo "${row[2]}" > /root/${row[1]}

但它只写第一行,但 文本字段是多行文本,我需要在该文件中写入全文

请帮忙

【问题讨论】:

  • 为什么要混合语言,只需要用 php 来完成
  • 用 printf 代替吗?
  • 你用 PHP 来做这一切。通过它的功能来做你想做的事情(我不清楚)。跳出壳是人们应该想到的最远的事情。它破坏了性能。

标签: php mysql shell


【解决方案1】:

默认情况下read -r row 将按空格/制表符/换行符进行分词。因为表格中的文本字段包含换行符,所以分词会削减您的文本结果。在这种情况下,很难避免。

我建议您应该将换行符替换为另一个标记,例如### 或者只是new-line,在SQL 中使用REPLACE(text, "\n", 'new-line')(我不熟悉sql REPlACE 函数),然后从shell 中获取结果,然后使用${row[2]//new-line/$'\n'} 将换行符转换回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多