как сопоставить пробел в sed?

<p>как я могу сопоставить пробелы в sed? в моих данных я хочу сопоставить все 3+ последующих пробельных символа (пробел) и заменить их на 2 пробела. как это может быть сделано?</p>

<p>класс символов <code>\s</code> будет соответствовать пробельным символам <code><tab></code> и <code><space></code>.</p><p>например:</p><pre><code>$ sed -e "s/\s\{3,\}/ /g" inputfile </code></pre><p>заменит каждую последовательность не менее чем 3 пробелов двумя пробелами.</p><hr><p><em>замечание</em>: для соответствия posix используйте символьный класс <code>[[:space:]]</code> вместо <code>\s</code>, поскольку последний является расширением gnu sed. см. спецификации posix для <a href="http://pubs.opengroup.org/onlinepubs/009695399/utilities/sed.html">sed</a> и <a href="http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd\_chap09.html#tag\_09\_03">bres</a> </p>

<p>это работает на macos 10.8:</p><pre><code>sed -e "s/[[:space:]]+/ /g" </code></pre>

<p>некоторые старые версии sed могут не распознавать\s как токен, соответствующий пустому пространству. в этом случае вы можете сопоставить последовательность из одного или нескольких пробелов и табуляций с '[xz] [xz] *', где x - пробел, а z - табуляция.</p>

<pre><code>sed 's/[ \t]*/"space or tab"/' </code></pre>