Как я могу сопоставить пробелы в sed? В моих данных я хочу сопоставить все 3+ последующих пробельных символа (пробел) и заменить их на 2 пробела. Как это может быть сделано?
Как я могу сопоставить пробелы в sed? В моих данных я хочу сопоставить все 3+ последующих пробельных символа (пробел) и заменить их на 2 пробела. Как это может быть сделано?
Ответы:
Класс символов \s
будет соответствовать пробельным символам <tab>
и <space>
.
Например:
$ sed -e "s/\s\{3,\}/ /g" inputFile
заменит каждую последовательность не менее чем 3 пробелов двумя пробелами.
ЗАМЕЧАНИЕ : для соответствия POSIX используйте класс символов [[:space:]]
вместо \s
, так как последний является расширением GNU sed. Смотрите спецификации POSIX для sed и BRE
sed
мне пришлось пользоваться, [[:space:]]
потому \s
что у меня не работало. Возможно , \s
является GNU СЭД расширение?
[[:space:]
можно использовать только те, [[:blank:]]
которые соответствуют горизонтальным табуляциям и пробелам (но не переводят строки, вертикальные табуляции и т. Д.).
Это работает на MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
сопоставить один или несколько пробелов.
-E
флаг.
Некоторые старые версии sed могут не распознавать \ s как токен, соответствующий пустому пространству. В этом случае вы можете сопоставить последовательность из одного или нескольких пробелов и табуляций с '[XZ] [XZ] *', где X - пробел, а Z - табуляция.
sed 's/[ \t]*/"space or tab"/'
sed
любой системы? Если нет, то, возможно, стоит упомянуть, где это работает аналогично другим ответам, просто чтобы мы знали ограничения и где это могло не дать ожидаемого результата.