it-swarm-ru.tech

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

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

206
Peter Smit

Класс символов \s будет соответствовать пробельным символам <tab> и <space>.

Например:

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

заменит каждую последовательность не менее чем 3 пробелов двумя пробелами.


ЗАМЕЧАНИЕ: для соответствия POSIX используйте символьный класс [[:space:]] вместо \s, поскольку последний является расширением GNU sed. См. Спецификации POSIX для sed и BREs

209
mrucci

Это работает на MacOS 10.8:

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

Некоторые старые версии sed могут не распознавать\s как токен, соответствующий пустому пространству. В этом случае вы можете сопоставить последовательность из одного или нескольких пробелов и табуляций с '[XZ] [XZ] *', где X - пробел, а Z - табуляция.

13
Marnix A. van Ammers
sed 's/[ \t]*/"space or tab"/'
10
Zac