语法错误:在 bash 脚本中使用 regexp_replace 时出现未终止的带引号的字符串

语法错误:在 bash 脚本中使用 regexp_replace 时出现未终止的带引号的字符串

我在我正在使用的 bash 脚本的末尾添加了一些代码。此处显示的代码旨在将 csv 复制到我的 postgres 表中,然后从 test_table 的标题列中删除括号、引号和双引号。

 #copy csv to table

psql -U postgres -d ebay_sold -c "COPY test_table (item_number,title,url,price) FROM '/home/perl_experiments/xmlcsv.txt' (DELIMITER('|'))"

#Remove brackets, then double qotes, then single quotes from title column
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '[()]', '', 'g')"
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"
    psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '''', '', 'g')"

复制到 postgres 表工作正常。在 postgres 中手动应用时,删除括号、双引号和单引号会按预期工作。但是,当我运行 bash 脚本时,我得到:

line 27: syntax error: unterminated quoted string

我收到的错误与该行有关

           psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"

正如我所说,当我登录到 postgres 时手动执行此命令时效果很好,有人知道为什么我在 bash 中运行脚本时会收到此错误吗?

答案1

您的线路:

psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '"', '', 'g')"

是问题所在。您在 处打开了一个双引号字符串"UPDATE,但它比您想象的更早关闭,导致您尝试将以下命令作为 SQL 运行:

UPDATE test_table SET title = regexp_replace(title, '

这显然是无效的。您需要用反斜杠转义双引号:

psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '\"', '', 'g')"

相关内容