Подтвердить что ты не робот

Насколько переносимо использовать полуколоны в качестве разделителей команд в sed?

В sed довольно распространено использование нескольких команд, разделенных полуколониями:

$ sed -e '/re/{s//replace/p; q;}

Однако стандарт (например, http://pubs.opengroup.org/onlinepubs/9699919799/) позволяет newlines как разделитель:

$ sed -e '/re/{
    s//replace/p
    q
}

Есть ли много распространенных реализаций sed, которые все еще используются, которые не позволяют использовать двоеточие? IOW, может ли sed script быть переносным использовать полуколоны?

4b9b3361

Ответ 1

Из спецификация POSIX sed:

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

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

/[^\{abcirtw:#];[[:space:]]*/: -)

Ответ 2

Tricky one... Только ссылка, которую я могу найти об этом, находится в sed-faq chapter 6.8.1

Большинство версий sed позволяют выдавать несколько команд на   командной строки, разделенной точкой с запятой (;).

Единственная ссылка на ; не работает для HHSED, см. Глава 7

Ответ 3

GNU sed, кажется, позволяет полуколонам в нескольких местах, что MacOS X (BSD) sed не поддерживает. Теперь у меня нет деталей на кончиках пальцев, но несколько раз мне приходилось модифицировать ответы, чтобы заставить их нормально работать на Mac. Возможно, проблема связана с командами, заключенными в скобки.