- ベストアンサー
特定のカンマの後にカンマを追加したい。
カンマ区切りテキストファイルの中身をsedコマンドを使用してカンマを一括で追加しようと思ったのですが、末尾にカンマを付けることは出来たのですが例えば特定カンマの次にカンマを追加する場合はどのようにすればいいでしょうか?(5つのカンマで区切のファイルに対して3カラム目の次に新しく追加するといった感じです。) 既に各カンマごとに値が入っているでそれを崩さずカンマの追加をしたいのですが。 参考までに自分が末尾にカンマを追加したときに使用した書式になります。 sed 's/$/,/g' test.txt > test2.txt よろしくお願い致します。
- みんなの回答 (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 ただしどちらにしても、データを " で引用していて、データ内にカンマがあるようなケースは対応できませんのでご注意を。
その他の回答 (1)
- trapezium
- ベストアンサー率62% (276/442)
& やバックリファレンス \n 使えばいいです。 sed 's/^.*,.*,.*,/&,/' test.txt とか、 sed 's/^\(.*,\)\{3\}/&,/' test.txt \n はカラム入れ換えなども併用可。もしかすると多少書式間違えてるかも、マニュアル確認してください。 sed 's/^\(.*\),\(.*\),/\2,\1,/' test.txt
お礼
回答のほうありがとうございます。 上記の方法試しましたところうまくいきました。 ありがとうございました。
お礼
回答のほうありがとうございます。 上記の方法試しましたところうまくいきました。 cutとpasteを使った方が簡単にできそうです。 ありがとうございました。