SEDは各行から最後の二重引用符を削除しません。

SEDは各行から最後の二重引用符を削除しません。

エクスポートするときは、各タイトルと値に二重引用符付きのCSVがあります。これを消去する必要がありますが、実際に値として存在する可能性のある二重引用符は削除しないでください。たとえば、

"HEADER1","HEADER2","HEADER3","HEADER4","HEADER5"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"
"SOME_ID_0X0","SOME_ID_1X2","false","Some blob value with "double quotes" inside of it"

"以下を使用して、各行の最初の行を削除できます。

$ sed -i.bak 's/^"//g' $1

次のように、中央のすべてを削除できます。

$ sed -i.bak 's/","/,/g' $1

最後に、"各行の最後の部分を削除できると思いました。

$ sed -i.bak 's/"$//g' $1

しかし、これはうまくいきません。一行で作業全体を完了できますか?

修正する 使ったこのウェブサイト隠し文字データを貼り付けた結果は次のとおりです。

ここに画像の説明を入力してください。

コメントの一部が正しいかもしれませんが、それでも変更が必要であることを意味するかどうかはわかりません。返品これらの引用符を削除する前に、CSVにこれらの引用符が含まれていることを確認するための明確な方法はありますか?たぶん、最初の文字を引用符で囲むことができますか?

ベストアンサー1

dos2unixDOSテキストファイル形式をUNIXテキストファイル形式に変換するために使用されます。

dos2unix $1

3つすべてを次のように組み合わせることができますsed

 sed -i 's/^"//g;s/","/,/g;s/"$//g' $1

SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it

使用AWK:

awk -F ',' -v OFS=',' '{for (i=1;i<=NF;i++) sub(/^\"/,"",$i) sub (/\"$/,"",$i); print $0}' 1$

HEADER1,HEADER2,HEADER3,HEADER4,HEADER5
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
SOME_ID_0X0,SOME_ID_1X2,false,Some blob value with "double quotes" inside of it
  • sub(/^\"/,"",$i)"各フィールドの先頭を削除します。
  • sub(/\"$/,"",$i)"各フィールドの終わりを削除します。

おすすめ記事