sedでカンマ区切りの列の置換を行いたい
以下の様なファイルがあります。
sedコマンドを使用して、カンマで区切られたn番目のカラム目を
置換したい場合どうすればよいでしょうか。
"1","2","3","4","5","6"
"1234","12","34567","abcd","efg","hi"
"a c","d f","12 34","0","AAA",""
"g i","j l","45 67","0","BBB","2021"
"m o","p r","3 2 1","1","ABC",""
"123","456","","abc","efg","hij"
①1カラム目以外置換(1カラム目以降削除)
sed 's/\(.*\),.*,.*,.*,.*,.*/\1/g' test.csv
②最後の6カラム目以外置換(6カラム目以外削除)
sed 's/.*,.*,.*,.*,.*,\(.*\)/\1/g' test.csv
③3カラム目を置換(3カラム目を「""」だけにしたい)
sed -e 's/\(.*\),\(.*\),.*,\(.*\),\(.*\),\(.*\)/\1,\2,"",\3,\4,\5/g' test.csv
とできたのですが、
表現がないというか、置換対象文字列の条件、表現が長いというか、全カラムを指定しているので、
少し、短くできないものでしょうか。
①パターン
sed 's/\([^,]*\),.*/\1/g' test.csv
②パターン
sed "s/.*,\([^,]*\)$/\1/g" test.csv
の様にできました。
③パターン
思いう浮かばず
これで、できているので間違いはないかとおもいますが、
どうなのでしょうか。
なにかいい案はないでしょうか?
お礼
できました!! sedでも$で最後という使い方ができるのですね!! いろいろ応用できそうです。 ありがとうございました!!