W tej edycji
Stéphane Chazelas POSIXify (ponownie) moje sedformatowanie poprzez wstawienie -eprzerwy xpression i innej -einstrukcji xpression. Teraz mogę go zapytać, dlaczego w komentarzach, ale przypuszczam, że jest to już numer 18 tej odpowiedzi i prawie wszystkie poprzednie były już dzięki podobnym gratisom (jeśli zobaczysz usunięte komentarze, będziesz wiedział, co Mam na myśli) . Myślę też, że jestem wystarczająco blisko, aby zrozumieć, dlaczego sformułować to w sposób, który może być bardziej ogólnie przydatny. Mam nadzieję, że ...
Generalnie wolę zachować moje całkowite sed -expressions do jednego, jeśli mogę, ale mam też większą ochotę na dostosowanie się do specyfikacji tak blisko, jak to możliwe, szczególnie gdy różnica wynosi nie więcej niż a <space>i an -e. Ale nie mogę tego zrobić, jeśli nie rozumiem, dlaczego powinienem. Oto krótkie podsumowanie obecnego stanu mojego zrozumienia:
' -e 'przerwa może przenośnie stanąć nasedskrypt\nprzerwie ewline wsedoświadczeniu wiersza polecenia ... Jestem wprawdzie rozmyta, dlaczegonawias zamykający w
sed{funkcji}musi być poprzedzony\nprzerwaniem ewline, jak podano tutaj:- Znak
<right-brace>poprzedzony jest znakiem<newline>a i może poprzedzać go lub następować po nim<blank>znak.
- Znak
\nprzerwa ewline podobnie jest wymagane po każdym wykorzystaniu ...a,b,c,i,r,t,w, lub:.
Ale nie rozumiem jasno, w jaki sposób definicja {funkcji }odnosi się do !operatora niebędącego operatorem. Jedyna wzmianka o operatorze negacji znajdująca się w specyfikacji:
- Funkcja może być poprzedzona jednym lub większą liczbą
!znaków, w którym to przypadku funkcja zostanie zastosowana, jeśli adresy nie wybiorą przestrzeni wzorów.
Czy oznacza to, że stosowanie dokumentu !zakłada {szelki }? Co z $!poleceniami - czy powinny być one również oddzielone ' -e 'przerwami? Czy o to chodziło, kiedy Stéphane POSIXifikował ostatnio moją odpowiedź?
Myślę, że jest to albo !operator negacji, albo bwypowiedź rancza, do której odnosi się w swojej edycji - a może jest to jednocześnie naraz - ale nie wiem i chciałbym to zrobić. Jeśli jest to tylkob oświadczenie ranczo, to wierzęd zrobiłby na jego miejscu i wyeliminować potrzebę ' -e 'przerwie, ale wolałbym być pewny zanim hazarding trzykroć POSIXified odpowiedź. Możesz pomóc?
Zrobiłem ryzykować po wszystkim , ale nie z każdej wielkiej pewności ...
:że jechałeś do domu kilka miesięcy temu. Ale nie do końca rozumiem, dlaczego drugie sedpolecenie było podobnie POSIXified .
sedjest dla mnie bardzo niejasna. W przeszłości kilkakrotnie prosiłem o wyjaśnienia, ale nie sądzę, aby w rezultacie został zaktualizowany. Dobrym testem jest wypróbowanie zestawu narzędzi dla potomków (Solaris, wywodzący się z oryginału, na którym w dużej mierze oparta jest specyfikacja POSIX).
s///utstitutions są w stanie zaakceptować tworzenie łańcuchów za pomocą ; . rozmywa się wokół poleceń, które muszą być oddzielone znakiem nowej linii, i jak -emoże stać w tym przypadku - przynajmniej dla mnie. natknąłem się jednak na coś, sedco nie interpretuje ich dość zamiennie.
;przed nową linią - nowa linia jest w porządku. Szczerze mówiąc, to mógłby zrobić bez -ei wszystko całkowicie i po prostu zapisać plik, jak #!/bin/sedz każdego polecenia na nową linią - lub te, które nie wymagają takich ograniczników zamiast rozdzielone ;. Te, które zrobić wymagają nowej linii są zwykle te, które przyjmują dowolne wejście - :nazwy etykiet i poleceń, które odnoszą się do nich jak blub tczy zamykanie }nawiasów klamrowych dla funkcji lub rEAD i wobrzędu, które biorą args nazwy pliku. Wszystkie muszą być przenośne \n.
b;n;:brozgałęziasz się do etykiety o nazwie";n;:b"seds historycznej i POSIX (a GNU sed nie jest pod tym względem).