Как я могу сопоставить пробелы в 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любой системы? Если нет, то, возможно, стоит упомянуть, где это работает аналогично другим ответам, просто чтобы мы знали ограничения и где это могло не дать ожидаемого результата.