sed соответствует базовым регулярным выражениям, а метасимвол +
- из расширенных регулярных выражений.Сокращение \s
для класса символов POSIX [[:space:]]
будет работать только в некоторых seds (например, в GNU sed) как расширение.Точно так же \n
будет работать только как «новая строка» в некоторых seds, в то время как в любом sed вы можете использовать обратную косую черту, за которой следует буквальный символ новой строки.Использование двойного ("
) вместо одинарных кавычек ('
) в сценарии приводит к тому, что он становится доступным для оболочки, и, следовательно, требует дополнительной экранирования от обратной косой черты - всегда используйте одинарные кавычки вокруг строк или сценариев, если только у вас нет особой необходимостидвойные кавычки (например, чтобы позволить переменной расширяться) и используйте только двойные, если у вас нет особой необходимости ни в одном (например, чтобы разрешить расширение подстановочного знака).
Чтобы сделать то, что вы хотите в любом sed POSIX, это:
$ echo 'abc def gks dps' | sed 's/[[:space:]][[:space:]]*/\
/g'
abc
def
gks
dps
, но это будет работать с GNU sed (обратите внимание на -E
для включения ERE для +
- это поддерживается в GNU sed и OSX / BSD sed, но из этих 2 seds будет поддерживать только GNU sed\s
и \n
):
$ echo 'abc def gks dps' | sed -E 's/\s+/\n/g'
abc
def
gks
dps