В этом редактировании
Stéphane Chazelas POSIX исправляет (снова) мое sedформатирование, вставляя -eразрыв xpression и еще -eодин оператор xpression. Теперь, я мог бы просто спросить его, почему в комментариях, я полагаю, но это уже редакция № 18 для этого ответа, и почти все предыдущие были уже благодаря подобной халяве (если вы видите удаленные комментарии, вы будете знать, что Я имею в виду) . Кроме того, я думаю, что я достаточно близок к пониманию того, почему формулировать это так, чтобы это могло быть более полезным в целом. Так что надеемся ...
Как правило, я предпочитаю, чтобы мои общие sed -eвыражения были равны единице, но я бы также предпочел соответствовать спецификации настолько близко, насколько я могу, особенно когда разница составляет не более чем a <space>и an -e. Но я не могу сделать это, если я не понимаю, почему я должен. Вот краткое изложение текущего состояния моего понимания:
' -e 'перерыв может переносимый стоять в течениеsedсценария\nперерыва ewline вsedкомандной строке заявлении ... Я правда нечеткий о том, почемузакрывающей скобке в
sed{функции}должен предшествовать\nразрыв строки, как указано здесь:<right-brace>Должен предшествовать<newline>и может предшествовать или следовать за<blank>персонажами.
\nперерыв ewline аналогично требуется после любого использования ...a,b,c,i,r,t,w, или:.
Но я не совсем понимаю, как определение {функции }относится к !неоператору. Единственное упоминание об операторе отрицания, которое я нахожу в спецификации:
- Функции может предшествовать один или несколько
!символов, и в этом случае функция должна применяться, если адреса не выбирают пространство шаблона.
Значит ли это, что использование скобок !подразумевает ? Что из команд - они также должны быть разделены перерывами? Было ли это то, что было решено, когда Стефан в последний раз POSIXified мой ответ?{}$!' -e '
Я думаю, что это либо !оператор отрицания, либо оператор bранчо, к которому он обращается в своем редактировании - или, возможно, это оба одновременно - но я не знаю и хотел бы этого. Если это толькоb ранчо заявление, то я считаюd , бы на своем месте и устранить необходимость ' -e 'перерыва, но я предпочел бы быть уверенным , прежде чем трижды рискуя POSIXified ответ. Вы можете помочь?
Я рискну все - таки , а не с какой - либо большой долей уверенности ...
:роль - ты поехал домой несколько месяцев назад. Но я не совсем понимаю, почему вторая sedкоманда была так же POSIXified .
sedменя очень неясна. Я просил разъяснения несколько раз в прошлом, но я не думаю, что это было обновлено в результате. Хорошим тестом является попытка использования инструментальной панели семейной реликвии (Solaris, взятой из оригинала и на которой в значительной степени основана спецификация POSIX).
s///учреждения должны принимать цепочку с ; , оно расплывчато вокруг команд, которые должны быть разделены новой строкой, и как они -eмогут стоять в этом случае - по крайней мере, для меня. Я еще не наткнулся на, sedкоторый не интерпретирует их довольно взаимозаменяемо, хотя.
;перед новой строкой - новая строка в порядке. Честно говоря, вы можете обойтись без -eи все полностью и просто написать файл, как #!/bin/sedс каждой командой на новой строке - или те, которые не требуют таких разделителей вместо разделителей ;. Те , которые делают требуют перевода строки , как правило , являются те , которые принимают произвольные входные - :имена меток и команды , которые относятся к ним , как bи tили закрывать }Curlies для функций, или rEAD и wобряда , которые принимают имя файла арг. За ними все должно следовать \n.
b;n;:bэтого вы";n;:b"переходите на метку, называемую в исторических и POSIX-сборках (и GNU sed не в этом отношении).