n番目のカンマの前後の引用符の追加

n番目のカンマの前後の引用符の追加

次の形式のファイルがあります。

a1,b1,c1,d1,e1,f1
a2,b2,c2,d2,e2,f2

特定の列(たとえば、a列とd列、列)の周りに引用符( ")を追加したいと思います。欲しくない他のカンマを含みますが、長さが異なります)次のような結果が得られます。

"a1",b1,c1,"d1",e1,f1
"a2",b2,c2,"d2",e2,f2

何度も繰り返しながら、次のことを試しました。列の開始か終了かによって、カンマ(、)をカンマ+引用符(、")または引用+カンマ("、)に置き換えました。

sed -E 's/(([^,]*,){1}[^,]*),/\1\,\"/g'

ただし、これはすべての2番目のカンマをカンマと引用符で置き換えますが、各コマンドは引用符が追加されている限り、場所だけを制御したいと思います。

ベストアンサー1

まず、すべての項目を置き換える必要はなく、gこれは「グローバルに」を意味し、列を指定する必要があるため、すべてを変更したくありません。次に、sed次のようにN番目の発生を対象とします。 N番目の発生はs/old/new/Nどこにありますか?Nしたがって、4番目のフィールドを参照するには、次のようにします。

$ sed 's/[^,]*/"&"/4' file 
a1,b1,c1,"d1",e1,f1
a2,b2,c2,"d2",e2,f2

最初のフィールドを変更します。

$ sed 's/[^,]*/"&"/1' file 
"a1",b1,c1,d1,e1,f1
"a2",b2,c2,d2,e2,f2

これは「演算子の左側に一致するすべて」を意味する&特殊変数です。seds///

おすすめ記事