- ベストアンサー
sedでカンマ区切りの列の置換方法と短縮表現
- sedコマンドを使用して、カンマで区切られた列の置換を行いたい場合、正規表現を使った置換パターンを指定することで実現できます。
- 置換対象の列を指定するためには、正規表現を使ってカンマ以外の文字をマッチさせる方法があります。
- また、置換対象の列を指定せずに置換したい場合は、最初の列と最後の列を残して他の列を削除する方法があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
混乱を招き、失礼しました。 検証して出力を確かめていたのですが、 失敗例をコピーしていたようです。 下記でいかがでしょうか? sed 's/\(^[^,]*,[^,]*\),[^,]*\(.*$\)/\1,""\2/' test.csv
その他の回答 (2)
- Ultra-Hetare
- ベストアンサー率38% (204/526)
sed 's/^[^,]*,[^,]*,\([^,]*\),.*$/\1/' test.csv 先頭と末尾を表す記号。 カンマ以外の文字列とカンマそのものの指定位置。 後方参照。 これらを踏まえて考えれば、好きなように置換ができますよ。 ちなみに、下記でも同じ出力が得られます。 sed -E 's/^[^,]*,[^,]*,([^,]*),.*$/\1/' test.csv BREとEREの違いなんですけど・・(調べてみてください) あとはご自身で調査・学習・工夫すれば、 大抵のことは出来るようになりますよ。
お礼
ありがとうございます。 出力することができました。
- Ultra-Hetare
- ベストアンサー率38% (204/526)
えーと sed 's/\(^[^,]*,[^,]*\)\([^,]*\)\(.*$\)/\1,""\3/' test.csv で、いかがでしょうか?
お礼
ありがとうございます。 試してみましたが、以下の通り、2カラム目と3カラム目に 「””」が追加になった形で、3カラム目以降が右にずれ、 カラム数が増えてしましました "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"
補足
すみません 3カラム目以外置換(3カラム目以外削除)するには どうしたらよいのですか。 "3" "34567" "12 34" "45 67" "3 2 1" "" にしたいです。
お礼
ありがとうございます。 期待した結果となりました。
補足
すみません 3カラム目以外置換(3カラム目以外削除)するには どうしたらよいのですか。 "3" "34567" "12 34" "45 67" "3 2 1" "" にしたいです。