У цьому редагувати
Stéphane Chazelas POSIXifies (знову) моє sed
форматування, вставляючи -e
розрив XPression і інший -e
XPression заяву. Тепер, я можу просто запитати його, чому в коментарях, я думаю, але це вже редакція №18 щодо цієї відповіді, і майже всі попередні вже були завдяки подібним халявам (якщо ви можете побачити видалені коментарі, ви знаєте, що Я маю на увазі) . Крім того, я думаю, що я досить близький, щоб зрозуміти, чому формулювати це таким чином, що може бути кориснішим. Тож ось сподіваємось ...
Я, як правило, вважаю за краще зберігати загальну кількість sed
-e
xpressions до однієї, якщо я можу, але я також більше віддаю перевагу відповідності специфікації якомога ближче, особливо коли різниця становить не більше ніж 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 для функцій, або r
EAD та w
обряду , які приймають ім'я файлу арг. Всі вони переносимо, за якими слід дотримуватися \n
.
b;n;:b
, ви розгалужуєтесь до мітки, яка називається";n;:b"
в історичних та POSIX-сегментах (і GNU sed не з цього приводу).