]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Zakończenie tworzenia dodatku A. Do przeredagowania.
authorxf0r3m <jakubstasinski@protonmaill.com>
Thu, 16 May 2024 11:30:57 +0000 (13:30 +0200)
committerxf0r3m <jakubstasinski@protonmaill.com>
Thu, 16 May 2024 11:30:57 +0000 (13:30 +0200)
articles/terminallog/Linux.Podstawy.html

index b0a8b6fd45eb8a566b299e461201cc7cc117b553..9998d2bc1b052265a38e94a760e7b44d41f90371 100644 (file)
@@ -14190,6 +14190,162 @@ source functions.sh
 <pre class="code-block">
 ... | awk '{printf $1" "}' | ...
 </pre>
+        <h3 id="18.6.3.sed">18.6.3. sed</h3>
+        <p>
+          <strong>Sed</strong>, czyli edytor strumienia
+          (ang. <em><strong>s<strong>tream <strong>ed</strong>itor</em>), 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ę
+          <em>find and replace</em>. Sed działa zarówno na plikach jak i 
+          strumieniu danych wejściowych. 
+        </p>
+        <p>
+          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. 
+        </p>
+        <p>
+          Przy początkach naszej pracy ze skryptami, najczęściej będziemy
+          wykorzystywać raczej opcje <em>find and replace</em>, nie mniej
+          jednak specyficzna składania polecenia <em>sed</em> wymaga aby
+          chociażby pokazać jak wyglądają polecenia <em>insert</em>,
+          <em>append</em> czy <em>print</em>.
+        </p>
+        <h4>Polecenie sed - <em>insert</em></h4>
+        <p>
+          Polecenie <em>insert</em> wstawia podaną wartość w konkretną linię
+          podaną przez wyrażenie regularne lub numer linii.
+        </p>
+<pre class="code-block">
+$ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
+</pre>
+        <p>
+          Na powyższym przykładzie <code class="code-inline">i</code> oznacza
+          właśnie polecenie <em>insert</em>. Przed poleceniem znajduje się
+          numer linii, który w przypadku narzędzia <em>sed</em> pisany jest
+          łącznie wraz ze wskazniem konkretnego polecenia. Po poleceniu
+          występuje wartość, która ma zostać zapisana w pliku.
+        </p>
+        <p>
+          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ę <em>-i</em>.
+        </p>
+        <p>
+          Podobnie jest poleceniem <em>append</em> - <strong>a</strong>,
+          również wymaga ono opcji <em>-i</em>. 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.
+        </p>
+        <h4>Polecenie sed - print</h4>
+        <p>
+          Za polecenie <em>print</em> odpowiedzialna jest litera <strong>p</strong>
+          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: 
+        </p>
+<pre class="code-inline">
+$ sed '1,12p' test.txt
+</pre>
+        <p>
+          Tutaj istotną role pełni cytowanie. Jeśli checielibyśmy wyświetlić
+          linie od 100 do końca pliku, to polecenie <em>sed</em> mogło by
+          wyglądac w ten sposób: <code class="code-inline">'100,$p'</code>.
+          No dobrze, a jeśli początek zakresu jest zapisany w zmiennej to
+          polecenie powinno wyglądać mniej więcej tak
+          <code class="code-inline">"$a,$p"</code>. Problem w tym, że dolna
+          granica zakresu, rownież zostanie zinterpretowana jako zmienna. W tej
+          sytuacji należy zacytować sam znak dolara.
+        </p>
+<pre class="code-inline">
+$ sed "$a,\$p" test.txt
+</pre>
+        <p>
+          Natomiast jeśli w zmiennej znajduje się dolna granica ciągu, to aby
+          oddzielić odwołanie się do zmienne od polecenia <em>print</em> należy
+          użyć funkcji powłoki BASH, jaką jest wyrażenie parametru.
+        </p>
+<pre class="code-inline">
+$ sed "1,${a}p" test.txt
+</pre>
+        <h4>Polecenie sed - find and replace</h4>
+        <p>
+          Do funkcji programu <em>sed</em>, <em>find and replace</em>
+          przypisana jest litera <strong>s</strong>. Domyślna składnia jest
+          następująca:
+        </p>
+<pre class="code-inline">
+$ sed "s/ala/ola/" test.txt
+</pre>
+        <p>
+          Po polecenie <code class="code-inline">s</code> 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
+          <code class="code-inline">ala</code> na ciąg
+          <code class="code-inline">ola</code>.
+        </p>
+        <p>
+          W przypadku tego polecenia <em>sed</em> jest bardzo elastyczny.
+          Ponieważ równie dobrze jako separator możemy użyć innych znaków.
+          Znak ukośnika (<strong>/</strong>) 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
+          (<strong>@</strong>) jak i przecinka (<strong>,</strong>).
+        </p>
+        <p>
+          Ostatni separator nie musi kończyć polecenia. Ponim zaś występują
+          modyfikatory. Jednym z takich modyfikatorów jest <strong>g</strong>.
+          Ten modyfikator powoduje, że wszystkie znalezione występienia
+          szukanej frazy zostaną zastąpione.
+        </p>
+        <p>
+          Podobnie polecenie <code class="code-inline">s</code> nie musi
+          rozpoczynać polecenia. Polecenie <em>s</em> zarówno jak
+          <em>i</em> czy <em>a</em> może zostać sprecyzowane do konkretnej
+          linii lub grupy elementów pasujących do wyrażenia regularnego.
+        </p>
+        <h3 id="18.6.4.wc">18.6.4. wc</h3>
+        <p>
+          Polecenie <strong>wc</strong> 
+          (ang. <em><strong>w</strong>ord <strong>c</strong>ount</em>), 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 <em>wc</em>, może być całkiem przydatne w
+          momencie gdy musimy ustalić np. granicę dla pętli <em>while</em>.
+          Najczęsciej stoswane jest liczenie linii 
+          (za pomoca opcji <em>-l</em>), czasami może się przydać liczenie
+          znaków (za pomocą opcji <em>-c</em>) oraz słów
+          (za pomocą opcji <em>-w</em>).
+        </p>
+        <h2 id="18.7.summary">18.7. Podsumowanie</h2>
+        <p>
+          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 <em>zsh</em> czy <em>fish</em>.
+          Inny ciekawy rozwiązaniem jest projekt <em>nu shell</em>,
+          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:
+        </p>
+        <ul>
+          <li><a href="https://morketsmerke.github.io/articles/terminallog/BASH_bushido.html">Wiele przydatnych sztuczek w BASH-u</a></li>
+          <li><a href="https://tldp.org/LDP/Bash-Beginners-Guide/html/index.html">Podręcznik do powłoki BASH dla początkujących.</a></li>
+          <li><a href="https://https://tldp.org/LDP/abs/html/index.html">Podręcznik do zaawansowanych skryptów BASH-u.</a></li>
+        </ul>
       </div>
                        <p style="margin: 15px; padding: 0; outline: 0;">
                                2024; COPYLEFT; ALL RIGHTS REVERSED;