Substitui todas as ocorrências de aspas duplas, exceto se seguido por ou precedido por vírgula usando o comando sed

0

Desejo substituir todas as ocorrências de " por ^" em meu arquivo, exceto quando " é seguido ou precedido por uma vírgula ( , ) ou se elas estão no início da linha

i.e. -

"InvoiceA","Doe,John",12/01/2016,200,"Comment on Invoice: "Customer X purchased item Z from store C named "Abc" on "03/04/2016""

Deve ser convertido para -

"InvoiceA","Doe,John",12/01/2016,200,"Comment on Invoice: ^"Customer X purchased item Z from store C named ^"ABC^" on ^"03/04/2016^""
    
por dataloader 07.12.2016 / 01:38

1 resposta

1

Suponho que você também queira deixar caracteres de cotação no final da linha intocada (como mostrado no seu exemplo). Você pode fazer isso com

sed 's/\([^,]\)"\([^,]\)/^"/g'

Isso procura sequências de três caracteres consecutivos, da seguinte maneira:

  1. Um caractere diferente de uma vírgula ( , ),
  2. Uma aspa dupla ( " ) e
  3. Um caractere diferente de uma vírgula,

e substitui-os por

  1. O primeiro caractere,
  2. ^" e
  3. O terceiro caractere.

Isso não funcionará em vários caracteres de aspas citadas consecutivas; por exemplo,

…200,"Purchase at store named "" on Tuesday"

P.S. Você sabia que seu exemplo tem citações desequilibradas?

"Comment on Invoice: "Customer X purchased item Z from store C named "Abc" on "03/04/2016""
                     ↑                                               ↑   ↑    ↑          ↑
    
por 07.12.2016 / 07:37

Tags