197

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

4 ответа4

205

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

Например:

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

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


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

58

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

sed -E "s/[[:space:]]+/ /g"
13

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

9
sed 's/[ \t]*/"space or tab"/'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .