• ベストアンサー

特定のカンマの後にカンマを追加したい。

カンマ区切りテキストファイルの中身をsedコマンドを使用してカンマを一括で追加しようと思ったのですが、末尾にカンマを付けることは出来たのですが例えば特定カンマの次にカンマを追加する場合はどのようにすればいいでしょうか?(5つのカンマで区切のファイルに対して3カラム目の次に新しく追加するといった感じです。) 既に各カンマごとに値が入っているでそれを崩さずカンマの追加をしたいのですが。 参考までに自分が末尾にカンマを追加したときに使用した書式になります。 sed 's/$/,/g' test.txt > test2.txt よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.2

「.*」だとカンマが飲み込まれてしまうので、「[^,]*」にする必要があります。 sed 's/\([^,]*,[^,]*,[^,]*,\)/\1,/' test.txt > test2.txt sed 's/\(\([^,]*,\)\{3\}\)/\1,/' test.txt > test2.txt ほかには cut / paste を使うのも手っ取り早いです。 cut -d, -f1-3 test.txt > L.txt cut -d, -f4-5 test.txt > R.txt paste -d, L.txt /dev/null R.txt > test2.txt ただしどちらにしても、データを " で引用していて、データ内にカンマがあるようなケースは対応できませんのでご注意を。

barash
質問者

お礼

回答のほうありがとうございます。 上記の方法試しましたところうまくいきました。 cutとpasteを使った方が簡単にできそうです。 ありがとうございました。

その他の回答 (1)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

& やバックリファレンス \n 使えばいいです。 sed 's/^.*,.*,.*,/&,/' test.txt とか、 sed 's/^\(.*,\)\{3\}/&,/' test.txt \n はカラム入れ換えなども併用可。もしかすると多少書式間違えてるかも、マニュアル確認してください。 sed 's/^\(.*\),\(.*\),/\2,\1,/' test.txt

barash
質問者

お礼

回答のほうありがとうございます。 上記の方法試しましたところうまくいきました。 ありがとうございました。

関連するQ&A