У цьому редагувати
Stéphane Chazelas POSIXifies (знову) моє sedформатування, вставляючи -eрозрив XPression і інший -eXPression заяву. Тепер, я можу просто запитати його, чому в коментарях, я думаю, але це вже редакція №18 щодо цієї відповіді, і майже всі попередні вже були завдяки подібним халявам (якщо ви можете побачити видалені коментарі, ви знаєте, що Я маю на увазі) . Крім того, я думаю, що я досить близький, щоб зрозуміти, чому формулювати це таким чином, що може бути кориснішим. Тож ось сподіваємось ...
Я, як правило, вважаю за краще зберігати загальну кількість sed -expressions до однієї, якщо я можу, але я також більше віддаю перевагу відповідності специфікації якомога ближче, особливо коли різниця становить не більше ніж a <space>та an -e. Але я не можу цього зробити, якщо не розумію, чому я повинен. Ось короткий опис сучасного стану мого розуміння:
' -e 'перерва може стерпний стояти протягомsedсценарію\nперерви ewline вsedкомандному рядку заяві ... Я правда нечіткий про те, чомузавершувальній дузі у
sed{функції}має передувати\nперерва ewline, як зазначено тут:- Перед цим символом
<right-brace>передує знак "a"<newline>та може передувати або слідувати<blank>символам.
- Перед цим символом
\nперерву ewline аналогічно потрібно після будь-якого використання ...a,b,c,i,r,t,w, або:.
Але я не розумію чітко, як визначення {функції }стосується !не оператора. Єдина згадка, яку я знаходжу про оператора заперечення у специфікаціях:
- Функції може передувати один або більше
!символів, і в цьому випадку функція повинна застосовуватися, якщо адреси не вибирають простір шаблону.
Чи означає це , що використання !має на увазі {брекети }? Що з $!команд - їх також слід розділяти ' -e 'перервами? Чи було саме це питання, коли Stéphane останнім часом POSIXIFіфікував мою відповідь?
Я думаю, що це або !оператор заперечення, або це bзаява про ранчо, до якого він звертається у своїй редакції - або, можливо, це обидва одразу - але я не знаю і мені це хотілося б. Якщо це лишеb твердження про ранчо, то, я вважаю, що це dзробить замість цього і усуне необхідність ' -e 'перерви, але я вважаю за краще бути впевненим, перш ніж загрожувати трикратною відповіді POSIXified . Ви можете допомогти?
Я ризикну все - таки , а не з якоюсь - або великою часткою впевненості ...
:ти їхав додому місяці тому. Але я не повністю розумію, чому друга sedкоманда була аналогічно POSIXified .
sedмене дуже незрозуміла. У минулому я кілька разів просив роз'яснення, але не думаю, що це було оновлено. Хороший тест - спробувати з інструментальним інструментом heirloom (Solaris one, отриманий з оригіналу і на якому в основному базується специфіка POSIX).
s///заборонені дії повинні приймати ланцюжок з a ; . він розмивається навколо команд, які повинні бути розмежовані новим рядком, і як це -eможе бути в цьому випадку - принаймні, це для мене. ive все ще наткнутися на sedщо doesnt інтерпретувати їх досить взаємозамінно, хоча.
;попередній рядок - новий рядок чудово. Чесно кажучи, ви могли б обійтися без -eцілісних повністю і просто написати файл, як #!/bin/sedпри кожній команді в новому рядку - або ті, для яких не потрібні такі роздільники, а не обмежені ;. Ті , які роблять вимагають перекладу рядка , як правило , є ті , які приймають довільні вхідні - :імена міток і команди , які відносяться до них , як bі tчи закривати }Curlies для функцій, або rEAD та wобряду , які приймають ім'я файлу арг. Всі вони переносимо, за якими слід дотримуватися \n.
b;n;:b, ви розгалужуєтесь до мітки, яка називається";n;:b"в історичних та POSIX-сегментах (і GNU sed не з цього приводу).