web-dev-qa-db-ja.com

どのようにsedの空白を一致させるのですか?

どのように私はsedの空白を一致させることができますか?私のデータでは、3つ以上の後続の空白文字(タブスペース)をすべて一致させ、それらを2つのスペースで置き換えたいと思います。どうすればこれができますか?

210
Peter Smit

文字クラス\sは、空白文字<tab>および<space>と一致します。

例えば:

$ sed -e "s/\s\{3,\}/  /g" inputFile

少なくとも3つの空白のすべてのシーケンスを2つのスペースで置き換えます。


REMARK:POSIX準拠の場合、後者はGNU sed拡張子であるため、[[:space:]]の代わりに文字クラス\sを使用します。 sed および BRE のPOSIX仕様を参照してください。

215
mrucci

これはMacOS 10.8で動作します。

sed -E "s/[[:space:]]+/ /g"
61
some ideas

Sedの古いバージョンの中には、\ sを空白マッチングトークンとして認識しない場合があります。その場合、1つ以上のスペースとタブのシーケンスを '[XZ] [XZ] *'と一致させることができます。ここで、Xはスペース、Zはタブです。

13
sed 's/[ \t]*/"space or tab"/'
10
Zac