• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sedでカンマ区切りの列の置換を行いたい)

sedでカンマ区切りの列の置換方法と短縮表現

このQ&Aのポイント
  • sedコマンドを使用して、カンマで区切られた列の置換を行いたい場合、正規表現を使った置換パターンを指定することで実現できます。
  • 置換対象の列を指定するためには、正規表現を使ってカンマ以外の文字をマッチさせる方法があります。
  • また、置換対象の列を指定せずに置換したい場合は、最初の列と最後の列を残して他の列を削除する方法があります。

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

  • ベストアンサー
回答No.2

混乱を招き、失礼しました。 検証して出力を確かめていたのですが、 失敗例をコピーしていたようです。 下記でいかがでしょうか? sed 's/\(^[^,]*,[^,]*\),[^,]*\(.*$\)/\1,""\2/' test.csv

abc999xyz
質問者

お礼

ありがとうございます。 期待した結果となりました。

abc999xyz
質問者

補足

すみません 3カラム目以外置換(3カラム目以外削除)するには どうしたらよいのですか。 "3" "34567" "12 34" "45 67" "3 2 1" "" にしたいです。

その他の回答 (2)

回答No.3

sed 's/^[^,]*,[^,]*,\([^,]*\),.*$/\1/' test.csv 先頭と末尾を表す記号。 カンマ以外の文字列とカンマそのものの指定位置。 後方参照。 これらを踏まえて考えれば、好きなように置換ができますよ。 ちなみに、下記でも同じ出力が得られます。 sed -E 's/^[^,]*,[^,]*,([^,]*),.*$/\1/' test.csv BREとEREの違いなんですけど・・(調べてみてください) あとはご自身で調査・学習・工夫すれば、 大抵のことは出来るようになりますよ。

abc999xyz
質問者

お礼

ありがとうございます。 出力することができました。

回答No.1

えーと sed 's/\(^[^,]*,[^,]*\)\([^,]*\)\(.*$\)/\1,""\3/' test.csv で、いかがでしょうか?

abc999xyz
質問者

お礼

ありがとうございます。 試してみましたが、以下の通り、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"

abc999xyz
質問者

補足

すみません 3カラム目以外置換(3カラム目以外削除)するには どうしたらよいのですか。 "3" "34567" "12 34" "45 67" "3 2 1" "" にしたいです。

関連するQ&A