Substituir string por outro script de shell de string

0

Eu tenho um arquivo no formato:

"data","data","data",data" .

Agora, se os dados tiverem um " , meu analisador não poderá analisar o arquivo. Por isso, quero usar sed para substituir " por """ , mas não onde ele vê "," , já que é essencialmente o delimitador.

Não consigo descobrir quais devem ser os parâmetros sed.

    
por Cheetah 17.04.2013 / 15:16

1 resposta

2

Tenho certeza que você também pode fazer isso em sed , mas é muito mais fácil para mim em Perl:

perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx/\"\"\"/g' data.txt

EXPLICAÇÃO:

  • perl -pe : executa o script dado na linha de comando em cada linha do arquivo de entrada
  • s/([^,])\"/$1xxx/g; : substitui todas as ocorrências de " precedidas por qualquer caractere não-vírgula com uma string aleatória xxx . Isso pressupõe que seus dados nunca conterão xxx .
  • s/xxx,/\",/g; : substitua os xxx que são seguidos por uma vírgula de volta para ", .
  • s/xxx/\\"/g : substitua o restante do xxx pelas aspas com escape \" , esses serão os " que estavam nos seus dados.

EXEMPLO:

$ cat test.txt
"data","da"t"a","data","data","foo "bar" foo", "data"

$ perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx//g' test.txt 
"data","data","data","data","foo bar foo","data
    
por 17.04.2013 / 16:04

Tags