sedで連続する空白を処理するメモ
普通にしたらうまく置換できなかったのでメモ
環境
gnu bash 4.2.10(1)
gnu sed 4.1.1
正規表現メモ SEDの項目を確認しつつ最初やってみたコマンド
echo " 3409 pts/0 00:00:00 bash" | sed 's/\s+/ /g'
結果は変わらず。
3409 pts/0 00:00:00 bash
manを見たら-rをつけるとPerl5互換の正規表現が使えるらしい
echo " 3409 pts/0 00:00:00 bash" | sed -r 's/\s+/ /g'
変わった。
3409 pts/0 00:00:00 bash
オプションの-rを付けずにする方法ないかなと思って色々試行錯誤してみた。
1.うまくいくけどなんかね・・・
echo " 3409 pts/0 00:00:00 bash" | sed 's/\s\s\+/ /g'
2.classは使えない・・・?なんかキャラクタリストとして解釈されてた。
echo " 3409 pts/0 00:00:00 bash" | sed 's/[:space:]\+/ /g'
3.ここで考えて、\s+の時は最短マッチで置換してるのでは・・・と思い以下にした。
echo " 3409 pts/0 00:00:00 bash" | sed 's/\s{2,}/ /g'
うまくいった。
うーん・・・どうなのこれ。使い方が間違ってるのだろうけど・・・
よくわからない。