つかいます sed -e "s/[[:space:]]\+/ /g"
説明は次のとおりです。
[ # start of character class
[:space:] # The POSIX character class for whitespace characters. It's
# functionally identical to [ \t\r\n\v\f] which matches a space,
# tab, carriage return, newline, vertical tab, or form feed. See
# https://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
] # end of character class
\+ # one or more of the previous item (anything matched in the brackets).
交換する場合は、スペースのみを挿入します。[:space:]
それは文字クラスの略語であり、正規表現エンジンはそこにどの文字を配置するのかわからないため、そこでは動作しません。
+
理由のsedの正規表現エンジンを正規表現でエスケープしなければならない+
のに対し、通常の文字である\+
「一つ以上」のメタ文字です。正規表現のマスタリングの 86ページで、ジェフリー・フリードルは脚注で、edとgrepがエスケープされた括弧を使用したと述べています。 」私は彼がプラス記号について同じように感じていたので、それをエスケープしてメタキャラクターとして使用する必要があると思います。これで簡単につまずくのは簡単です。
あなたがエスケープする必要がありますsedは+
、?
、|
、(
、と)
。または-rを使用して拡張正規表現を使用します(その後、sed -r -e "s/[[:space:]]\+/ /g"
またはsed -re "s/[[:space:]]\+/ /g"