次の形式のファイルがあります。
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
これは「演算子の左側に一致するすべて」を意味する&
特殊変数です。sed
s///