sed コマンドを使用して、前後にコンマのない二重引用符を置き換えます。

sed コマンドを使用して、前後にコンマのない二重引用符を置き換えます。

"ファイル内のすべてのエントリをコンマ()で始まる、または行の先頭にない限り、次に置き換えたいと思います。^"",

つまり

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

-に変換する必要があります。

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

答え1

私は(あなたの例のように)行末の引用符文字を変更せずにそのままにしたいとします。あなたはこれを行うことができます

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

これにより、3 つの連続した文字で構成される文字列が検索されます。

  1. カンマ()以外の文字,
  2. 二重引用符(")と
  3. カンマ以外の文字、

そしてそれらを次に置き換えます。

  1. 最初の役割、
  2. ^"
  3. 3番目の役割。

たとえば、複数の連続した引用符文字では機能しません。

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

PS:あなたの例に不均衡な引用があることをご存知ですか?

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

関連情報