erro de sintaxe: string entre palavras não terminada ao usar regexp_replace no script bash

0

Adicionei alguns códigos ao final de um script bash que estou usando. O código mostrado aqui destina-se a copiar um csv para minha tabela postgres e, em seguida, remover colchetes, aspas e aspas duplas da coluna de título de 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')"

A cópia para a tabela postgres funciona bem. Os colchetes de remoção, aspas duplas e aspas simples funcionam como esperado quando aplicados manualmente em postgres. No entanto, quando executo o script bash, recebo:

line 27: syntax error: unterminated quoted string

O erro que estou recebendo está relacionado à linha

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

Como eu digo este comando funciona bem quando executado manualmente quando estou logado no postgres, alguém tem alguma idéia porque eu estou recebendo esse erro quando eu executar o script no bash?

    
por neilH 08.05.2016 / 21:06

1 resposta

3

Sua linha:

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

é o problema. Você abre uma cadeia entre aspas duplas em "UPDATE , mas ela é fechada antes do que você pensa, fazendo com que você tente executar o seguinte como SQL:

UPDATE test_table SET title = regexp_replace(title, '

Isso claramente não é válido. Você precisa escapar da sua aspa dupla com uma barra invertida:

psql -U postgres -d ebay_sold -c "UPDATE test_table SET title = regexp_replace(title, '\"', '', 'g')"
    
por 08.05.2016 / 21:29