構文エラー: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')"

おすすめ記事