From: xf0r3m Date: Thu, 16 May 2024 11:30:57 +0000 (+0200) Subject: Zakończenie tworzenia dodatku A. Do przeredagowania. X-Git-Url: https://gitweb.morketsmerke.org/?a=commitdiff_plain;h=6a125af5a0db8ec6a4e347d199723b471a53d61c;p=mmdev.git Zakończenie tworzenia dodatku A. Do przeredagowania. --- diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html index b0a8b6f..9998d2b 100644 --- a/articles/terminallog/Linux.Podstawy.html +++ b/articles/terminallog/Linux.Podstawy.html @@ -14190,6 +14190,162 @@ source functions.sh
 ... | awk '{printf $1" "}' | ...
 
+

18.6.3. sed

+

+ Sed, czyli edytor strumienia + (ang. stream editor), jest + nieinteraktywnym edytorem tekstu opierającym się na wydawaniu + pojedynczych poleceń. Za jego pomocą możemy wstawiać do plików + poszczególne linie lub je zmieniać stosując znaną metodę + find and replace. Sed działa zarówno na plikach jak i + strumieniu danych wejściowych. +

+

+ W plikach może zajść taka potrzeba aby zmienić pewien zapis tylko + w jedenej linii, to wskazanie tej wybranej linii może odbyć się na + dwa sposoby: za pomocą wyrażenia regularnego lub podając konkretny + numer linii. Wyrażenie regularne sprawdzi sie przy kilku liniach, w + przypadku jednej konkretnej, wystarczy podać jej numer. +

+

+ Przy początkach naszej pracy ze skryptami, najczęściej będziemy + wykorzystywać raczej opcje find and replace, nie mniej + jednak specyficzna składania polecenia sed wymaga aby + chociażby pokazać jak wyglądają polecenia insert, + append czy print. +

+

Polecenie sed - insert

+

+ Polecenie insert wstawia podaną wartość w konkretną linię + podaną przez wyrażenie regularne lub numer linii. +

+
+$ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
+
+

+ Na powyższym przykładzie i oznacza + właśnie polecenie insert. Przed poleceniem znajduje się + numer linii, który w przypadku narzędzia sed pisany jest + łącznie wraz ze wskazniem konkretnego polecenia. Po poleceniu + występuje wartość, która ma zostać zapisana w pliku. +

+

+ Polecenie to domyślnie zwrócić na standardowe wyjście całą zawartość + pliku z podmienioną linią, ponieważ jest to edytor strumienia to + musi on otwrzyć plik i działać na nim w pamięci. Aby nasze zamiany + faktycznie miały jakiś skutek musimu dodać opcję -i. +

+

+ Podobnie jest poleceniem append - a, + również wymaga ono opcji -i. Składania tego polecenia + jest podobna nie mniej jednak zasada działania jest trochę inna. + Otóż to polecenie dopisze pod wskazaną linią, podaną wartość. W + przypadku naszego przykładu, podana wartość znalazła by się w 22 + linii. +

+

Polecenie sed - print

+

+ Za polecenie print odpowiedzialna jest litera p + nie ma w tym nic dziwnego, nie mniej jednak warto zaznaczyć, że + polecenie to przyjmuje zakres linii do wyświetlania np. jesli + chcemy wyświetlić linie od 1 do 12, to wówczas możemy skorzystać z + poniższego polecenia: +

+
+$ sed '1,12p' test.txt
+
+

+ Tutaj istotną role pełni cytowanie. Jeśli checielibyśmy wyświetlić + linie od 100 do końca pliku, to polecenie sed mogło by + wyglądac w ten sposób: '100,$p'. + No dobrze, a jeśli początek zakresu jest zapisany w zmiennej to + polecenie powinno wyglądać mniej więcej tak + "$a,$p". Problem w tym, że dolna + granica zakresu, rownież zostanie zinterpretowana jako zmienna. W tej + sytuacji należy zacytować sam znak dolara. +

+
+$ sed "$a,\$p" test.txt
+
+

+ Natomiast jeśli w zmiennej znajduje się dolna granica ciągu, to aby + oddzielić odwołanie się do zmienne od polecenia print należy + użyć funkcji powłoki BASH, jaką jest wyrażenie parametru. +

+
+$ sed "1,${a}p" test.txt
+
+

Polecenie sed - find and replace

+

+ Do funkcji programu sed, find and replace + przypisana jest litera s. Domyślna składnia jest + następująca: +

+
+$ sed "s/ala/ola/" test.txt
+
+

+ Po polecenie s występuje separator, + następnie wartość poszukiwana, znów separator oraz nowa wartość, + która zastąpi wartość poszukiwania, na końcu polecenia znów występuje + separator. Polecenie zamieni pierwsze wystąpienie ciągu + ala na ciąg + ola. +

+

+ W przypadku tego polecenia sed jest bardzo elastyczny. + Ponieważ równie dobrze jako separator możemy użyć innych znaków. + Znak ukośnika (/) wykorzystywany jest w ścieżkach, + a one są jednymi z częściej zmienianych elementów konfiguracyjnych + w Uniksach. Jako separatora możemy użyć zarówno: małpy + (@) jak i przecinka (,). +

+

+ Ostatni separator nie musi kończyć polecenia. Ponim zaś występują + modyfikatory. Jednym z takich modyfikatorów jest g. + Ten modyfikator powoduje, że wszystkie znalezione występienia + szukanej frazy zostaną zastąpione. +

+

+ Podobnie polecenie s nie musi + rozpoczynać polecenia. Polecenie s zarówno jak + i czy a może zostać sprecyzowane do konkretnej + linii lub grupy elementów pasujących do wyrażenia regularnego. +

+

18.6.4. wc

+

+ Polecenie wc + (ang. word count), jest + poleceniem, które zadaniem jest liczenie linii, znaków czy też słów, + podanych za pomocą pliku czy też ze strumienia standardowego wejścia. + Wykorzystanie polecenia wc, może być całkiem przydatne w + momencie gdy musimy ustalić np. granicę dla pętli while. + Najczęsciej stoswane jest liczenie linii + (za pomoca opcji -l), czasami może się przydać liczenie + znaków (za pomocą opcji -c) oraz słów + (za pomocą opcji -w). +

+

18.7. Podsumowanie

+

+ W tym rozdziale poznaliśmy podstawy tworzenia skryptów powłoki, które + pomogą nam automatyzować zadania wykonywana w powłoce. Nie piszę + tutaj, konkretnych nazw. Ponieważ jeśli zagłebimy się w temat, to + BASH zebrał najlepsze funkcje oraz rozwiązania z innych powłok i + zaimplementował u siebie. Oczywiście sam BASH nie jest nowym + rozwiązaniem, ponieważ powstał już 1987 roku. Innymi stosowanymi + rozwiązaniami są takie powłoki jak zsh czy fish. + Inny ciekawy rozwiązaniem jest projekt nu shell, + przestawiający troche inne podejście. Zachęcam do zapoznania się + z projektem. Jeśli jednak twardo będziemy obstawać, przy BASH-u + (ma to swoje zalety, większość dystrybucji wykorzystuje jednak BASH, + więc lepiej mieć to samo środowisko w domu jak i na serwerze w + pracy). To można zapoznać się z dodatkowymi materiałami: +

+

2024; COPYLEFT; ALL RIGHTS REVERSED;