BSD sed игнорирует начальные пробелы в тексте для команды \ - PullRequest
1 голос
/ 11 марта 2019

Ведущие пробелы сохраняются в команде echo.Возьмем, к примеру, этот сценарий:

echo 'abc
    def'

Вывод:

$ sh foo.sh 
abc
    def

Но начальный пробел в тексте sed для команды a\ не сохраняется с BSD sed, который приходитс macOS.Возьмите этот сценарий:

echo abc | sed '/abc/a\
    def
'

Вывод с помощью BSD sed в macOS:

$ sh foo.sh 
abc
def

Вывод с помощью GNU sed в Linux:

$ sh foo.sh
abc
    def

IЯ могу решить эту проблему на macOS и сохранить начальные пробелы, как это:

echo abc | sed '/abc/a\
\ \ \ \ def
'

Вывод:

$ sh foo.sh 
abc
    def

Где поведение игнорирования начальных пробелов в тексте для a\ команда, указанная в Документация POSIX sed?

Я не смог найти ничего в документации, которая говорит, что такое поведение игнорирования начальных пробелов в тексте для a\ является правильным.Можете ли вы увидеть в документации что-нибудь, что это поведение правильно?

1 Ответ

2 голосов
/ 11 марта 2019

Похоже, ты был прав. По мере того, как вы сделали конкретное наблюдение, поведение вашего sed было бы несоответствующим.

Действительно, POSIX (как вы связали это) говорит:

Команды редактирования, кроме {...}, a, b, c, i, r, t, w, : и #, могут выполняться , необязательными символами и другой командой редактирования. Однако, когда команда редактирования s используется с флагом w , выполнение этой команды с другой командой таким образом приводит к неопределенным результатам.

Это похоже на то, что POSIX подходит к решению этого вопроса, и - исключая команду a из условия & mdash; кажется, она признает то, что уже подразумевалось. Кажется, признают, что пробелы важны для a.

Мой ответ, конечно, не является окончательным, но вы, похоже, имеете вес доказательств на вашей стороне.

...