• ベストアンサー

特定の列のみ置換を行いたい

sedコマンドを使用して、カンマで区切られた 3フィールド目の空白文字列を全てNULLに 置換するにはどうすればよろしいのでしょうか。 教えて下さい。 (例) a c,d f, 12 g i,j l, 45 m o,p r, 3 を a c,d f,12 g i,j l,45 m o,p r,3 のようにしたいのです。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

こんなのでどうでしょうか。 一応質問の例ではうまくいくはずです。 sed -e 's/\([^,]*,\) */\1/2' or sed -e 's/\(\([^,]*,\)\{2\}\) */\1/' ##1のパターンは*?やらが使えてもダメですね 空白文字列にはタブなども含まれるとかなら適当に修正してください。

taka394
質問者

補足

大変ありがとうございます。 すみませんが、下記の場合、各々が何を 意味しているのか簡単に説明をして頂け ないでしょうか。 sed -e 's/\([^,]*,\) */\1/2'

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

>各々が何を意味しているのか 各々とは? 正規表現のメタ文字であればちょっと調べればわかると思いますが。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

第三フィールドの空白をNULLに置換したいというのは質問の例で言うと 数字の前の空白を消すということですか? フィールドの区切り以外にカンマは出てこないですよね? >sed -e 's/^(.*?,){2}\s/\1/g' 正規表現はツールによって違いがあって、*?とか\sはsedでは使えないことがほとんどです。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.1

sedでは正規表現が使用できるようなので単純に考えて sed -e 's/^(.*?,){2}\s/\1/g' こうではないでしょうか。 試していないので(というか所持していないので)実際にはどうなるか 分かりませんけど。

関連するQ&A