]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Zakończenie redagowania dodatku A.
authorxf0r3m <jakubstasinski@protonmaill.com>
Fri, 17 May 2024 11:32:44 +0000 (13:32 +0200)
committerxf0r3m <jakubstasinski@protonmaill.com>
Fri, 17 May 2024 11:32:44 +0000 (13:32 +0200)
articles/terminallog/Linux.Podstawy.html

index c8c025ab2e84054d63717586ae8374aec119acd8..0f51b05d285ea3ae342772eaa25d38a701ca4226 100644 (file)
@@ -13374,12 +13374,12 @@ xf0r3m@vm-f99031d:~$
         </p> 
         <p>
           Wśród Uniksów mamy dostępne kilka rodzajów powłok. Najczęściej będą
-          to powłoki BASH oraz KSH (wykorzystywana w środowiska BSD). Obecnie
+          to powłoki BASH oraz KSH (wykorzystywana w środowiskach BSD). Obecnie
           w wielu dystrybucjach możemy spotkać się z ewolucją kwestii domyślnej
           powłoki a przynajmniej dla naszego domyślnego użytkownika. Co raz
           częściej możemy spotkać się z takimi powłokami jak ZSH oraz FISH są
           one następcami powłoki BASH, zawierającymi wiele udogodnień
-          pozwalających na łatwiejsze tworzenie poleceń powłoki. Obecnie na
+          pozwalających na łatwiejsze tworzenie poleceń. Obecnie na
           popularności zyskuje projekt o nazwie <em>nu-shell</em> jest to
           nowy rodzaj połoki zmieniający dotychczasowe doświadczenia z nią
           związane. Nie mniej jednak informacje przedstawione w tym rozdziale
@@ -13397,7 +13397,7 @@ xf0r3m@vm-f99031d:~$
           np. skrypt coś usuwa. Sprawdzenie tego czy nasze pomysły maja w
           ogóle sens, pozwala zaoszczędzić czas podczas debugowania skryptu.
           Może nam się wydawać, że pewne konstrukcje powłoki są cieżkie do
-          zapisania w postaci polecenie. Tak może faktycznie być, ale weźmy
+          zapisania w postaci polecenia. Tak może faktycznie być, ale weźmy
           pod uwagę to, że te konstrukcje mają szczególnie zaznaczony początek
           i koniec. Jeśli powłoka nie napotka odpowiedniego słowa kluczowego w
           wprowadzonym wierszu polecenie wówczas przejdzie w tryb wielolinii,
@@ -13426,7 +13426,7 @@ xf0r3m@vm-f99031d:~$
           skryptu jest klasyczna powłoka <em>Bourne</em>-a, albo autor zakłada,
           że domyślnym programem dostarczającym powłokę jest BASH, a plik
           <em>/bin/sh</em> jest tylko dowiązaniem symboliczym do
-          <em>/bin/bash</em>. W przypadku Debiana <em>/bin/sh</em> jest
+          <em>/bin/bash</em>. W przypadku Debiana, <em>/bin/sh</em> jest
           dowiązaniem do powłoki <em>DASH</em> bedąca tworem podobnym do
           <em>KSH</em>. Takie skrypty zazwyczaj wykorzysują proste polecenie
           oraz instrukcje bez specyficznych dla BASH mechanizmów. 
@@ -13471,7 +13471,7 @@ Hello, World!
 </pre>
         <p>
           Teraz jeśli odbiorę uprawnienia wykonywania dla tego pliku to i tak
-          będę wstanie go uruchomić. Poprzez uruchomienie pośrednie.
+          będę wstanie go uruchomić, poprzez uruchomienie pośrednie.
         </p>
 <pre class="code-block">
 $ chmod -x test.sh
@@ -13520,7 +13520,7 @@ Hello, World!
         <p>
           Głównym celem jaki przyświeca tworzeniu skryptów powłoki jest
           automatyzacja powtarzalnych zadań wykonywanych w powłoce dystrybucji
-          Linuxa. Zatem jej naprostszą oraz najbardziej złożoną instrukcją
+          Linuksa. Zatem jej najprostszą oraz najbardziej złożoną instrukcją
           będzie najzwyklejszy uruchamiany przez nią program. Możemy dla
           przykładu umieścić w skrypcie z poprzedniego podrozdziału polecenie
           <em>ls</em>.
@@ -13557,7 +13557,7 @@ ls
           są <strong>zmienne</strong> - kontenery na dane, ułatwiające
           zapisanie toku myślenia w postaci algorytmu. W programowaniu ma to
           swoje odzwierciedlenie na pamięci, pozwalajac przypisać do
-          niewielkich obszarów pamięci, identyfikatory aby móc sie odwołać w
+          niewielkich obszarów pamięci, identyfikatory aby móc odwołać się, w
           kodzie źródłowym do ich zawartości.
         </p>
         <p>
@@ -13631,7 +13631,7 @@ cat /etc/passwd | grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'
         </p>
         <p>
           Powyższy przykład ma duży potencjał optymalizacyjny swoją drogą,
-          ponieważ pierwsze polecenie można pominąć i podać pliki odrazu
+          ponieważ pierwsze polecenie można pominąć i podać pliki od razu
           poleceniu <code class="code-inline">grep</code>.
         </p>
         <h3 id="18.2.4.commandsubstitution">18.2.4. Podstawienie polecenia</h3>
@@ -13657,7 +13657,26 @@ var=$(grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,');
 # lub:
 var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`;
 </pre>
-        <h3 id="18.2.5.quotation">18.2.5. Znaki cytowania</h3>
+        <h3 id="18.2.5.subshellsubstitution">18.2.5. Wyrażenie nawiasów okrągłych</h3>
+        <p>
+          Wyrażenie nawiasów okrągłych lub podstawienie podpowłoki, umożliwia
+          nam oddzielenie wykonania pewnych poleceń od głównego procesu
+          podpowłoki wykonującego skrypt. Użycie tego mechinizmu sprawdza się
+          do zapisania, poleceń w zwykłym nawiasie okrągłym.
+        </p>
+<pre class="code-block">
+(cd ytfzf &amp;&amp; make install doc)
+</pre>
+        <p>
+          Jest to szczególnie przydane, gdy musimy trzymać kurczowo jakiś
+          lokalizacji w systemie plików, a niektóre czynności tak jak
+          instalacja projektu pokazana na powyższym przykładzie wymaga 
+          zmiany tej
+          ścieżki. Ścieżka może zostać zmieniona w podpowłoce i wykonanie 
+          czynności
+          również. Nie będzie to miało wpływu na główny nurt działania skryptu.
+        </p>
+        <h3 id="18.2.6.quotation">18.2.6. Znaki cytowania</h3>
         <p>
           Jak było prawdopodobnie wspomniane o znakach cytowania w drugim
           rozdziale. W BASH-u do dyspozycji mamy 3 rodzaje cudzysłowów:
@@ -13680,7 +13699,7 @@ var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`;
           różne funkcje. Szczególnie może mieć to znaczenie przy takich
           poleceniach jak <em>sed</em> czy <em>grep</em>.
         </p>
-        <h3 id="18.2.6.positionalparams">18.2.6. Parametry pozycyjne</h3>
+        <h3 id="18.2.7.positionalparams">18.2.7. Parametry pozycyjne</h3>
         <p>
           Przekazanie do skryptu informacji jest jak najbardziej możlwe,
           oczywiście możemy zrobić to jak przypadku innych języków - podczas
@@ -13721,7 +13740,7 @@ $ ./test.sh foo bar
           wówczas wszysktie paramety są jednym elementem. Dostęp do parametrów
           w ten sposób osiągamy poprzez - <strong>$*</strong>.
         </p>
-        <h3 id="18.2.7.parameterexpression">18.2.7. Wyrażenie parametru</h3>
+        <h3 id="18.2.8.parameterexpression">18.2.8. Wyrażenie parametru</h3>
         <p>
           Wyrażenie parametru posiada w BASH-u kilka funkcji. Jednak chyba
           najważniejszą oraz tą, która wymaga zapamiętania jest separacja
@@ -13738,21 +13757,22 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
         <p>
           Oczywiście poza funkcją separacyjną wyrażenie parametru kilka innych
           zastosowań, jedno już zostało tutaj wymienione, jest to dostęp do
-          parametrów pozycyjnych powyżej 10-tej pozycji.
+          parametrów pozycyjnych powyżej 10-tej pozycji. Pozostałe są dostępne
+          na stronie podręcznika powłoki BASH.
         </p>
-        <h3 id="18.2.8.exitcode">18.2.7. Exitcode - wartość zwracana przez program</h3>
+        <h3 id="18.2.9.exitcode">18.2.7. Exitcode - wartość zwracana przez program</h3>
         <p>
           Niektóre narzędzie wykorzystywane przez nas do pracy w dystrybucjach
           Linuksa, zostają przez nas uruchomione i zaraz po tym zostaje nam
           zwrócony znak zachęty. I tak naprawdę to nie wiemy czy program
           wykonał swoje zadanie pomyślnie czy też nie. Nie mniej jednak
-          większość programów działających na Uniksa zwraca takzwany kod
+          większość programów działających na Uniksach zwraca takzwany kod
           wyjścia.
         </p>
         <ul>
           <li><strong>0</strong> - program poprawnie wykonał swoje zadanie.</li>
           <li><strong>!0</strong> - (wartość inna niż 0), podczas działania
-            program nie mógł poprawnie wykonać swoich zadania z różnych
+            program nie mógł poprawnie wykonać swoich zadań z różnych
             powodów.</li>
         </ul>
         <p>
@@ -13768,7 +13788,7 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
         <p>
           Rozpoczynając omawianie wyrażeń warunkowych, warto sobie wyjaśnić,
           że w BASH-u nie operujemy na wartościach logicznych. Na wartościach
-          logicznych operują polecenie wykonujące sprawdzenie danego wyrażenia
+          logicznych operują polecenia wykonujące sprawdzenie danego wyrażenia
           warunkowego. Na podstawie wyniku tego wyrażnia narzędzia te
           <strong>generują kod wyjścia</strong>: <em>0</em> - dla
           <strong>prawdy</strong> i <em>1</em> - dla <strong>fałszu</strong>.
@@ -13810,11 +13830,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
           plikiem.
         </p>
         <p>
-          Warunki które wymagają dwóch operatorów, to zazwyczaj takie jakie
+          Warunki, które wymagają dwóch operatorów, to zazwyczaj takie jakie
           znamy z lekcji matematyki: a &gt; b, d &lt;= e itd. Przyczym tutaj
           warto przypomnień, że zapis instrukcji warunkowych (warunków), jest
           jednocześnie zapisem polecenia, tak więc nie można użyć znaków
-          mniejszości (<em>&lt;</em>) czy większości (<em>&gt;</em>),
+          mniejszości (<strong>&lt;</strong>) czy większości 
+          (<strong>&gt;</strong>),
           zamiast nich musimy używać specjalnie przygotowanych na tę okazję
           zamienników:
         </p>
@@ -13837,12 +13858,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
         <p>
           Instukcje warunkowe na podstawie przekazanych przez programistę
           warunków, zwracaja kod wyjscia, który najczęściej interpretowany jest
-          przez konstrukcje warnukowe.
+          przez konstrukcje warunkowe.
         </p>
         <h3 id="18.3.2.if">18.3.2. Konstrukcje warunkowa - if</h3>
         <p>
           Konstrukcje warunkowe są elementem kontrolnym w programowaniu.
-          Ich zadaniem jest wykonanie określonych instrukcji determinowanych
+          Ich zadaniem jest wykonanie określonych instrukcji determinowanych
           na podstawie przekazanej instrukcji warunkowej. I najprostszym tego
           typu konstrukcją jest <em>if-then-else</em>.
         </p>
@@ -13867,7 +13888,7 @@ fi
           zwrócić kod wyjścia. Po warunku <strong>obowiązkowo występuje średnik</strong>,
           następnie słowo kluczowe <code class="code-inline">then</code>
           otwierające blok kodu dla sytuacji, w której warunek zwrócił kod
-          wyjścia <strong>równy 0</strong> (potocznie nazwywany prawdą). Po
+          wyjścia <strong>równy 0</strong> (potocznie nazywany prawdą). Po
           tym bloku występuje słowo kluczowe
           <code class="code-inline">else</code> otwierając tym samym blok
           kodu dla każdej innej wartości kodu wyjścia, która nie jest zerem.
           oraz całą konstrukcję.
         </p>
         <p>
-          Konstrukcję <em>if-then-else</em> można rozszerzyć od dodatkowy
+          Konstrukcję <em>if-then-else</em> można rozszerzyć o dodatkowy
           blok warunkowy <em>elif</em>. W momencie interpretacji takiej
           konstrukcji BASH sprawdzi na początek warunek przy <em>if</em>
-          następnie przy <em>elif</em> i jeśli oba te warunki oba te warunki
+          następnie przy <em>elif</em> i jeśli oba te warunki
           zwrócą niezerowy kod wyjścia, wtedy zostaną wykonane instrukcje
           zapisane w bloku <em>else</em>. Warto dodać, że nie ma limitu w
           ilości dodatkowych warunków (<em>elif</em>) tworząc przy tym całą
@@ -13907,7 +13928,7 @@ fi
           tego przypadku.
         </p> 
 <pre class="code-block">
-case $alphabet; in
+case $alphabet in
   'a') echo "A";;
   'b') echo "B";;
 esac
@@ -13922,13 +13943,13 @@ esac
           pominięcie spowoduje błąd powłoki.
         </p>
         <p>
-          Konstrukcja <em>Case</em> posiada przypadek uniwersalny
+          Konstrukcja <em>case</em> posiada przypadek uniwersalny
           wykorzystywany gdy zmienna nie pasuje, do żadnego z przypadków.
           Wartość takiego przypadku zapisuje się symbolem gwiazdki
           (<strong>*</strong>).
         </p>
 <pre class="code-block">
-case $alphabet; in
+case $alphabet in
   'a') echo "A";;
   'b') echo "B";;
    *) echo "To nie jest litera alfabetu";;
@@ -13942,7 +13963,7 @@ esac
           ograniczać do pojednczej wartości, ale może zawierać warianty.
         </p>
 <pre class="code-block">
-case $alphabet; in
+case $alphabet in
   'a'|'A') echo "A";;
   'b') echo "B";;
    *) echo "To nie jest litera alfabetu";;
@@ -13958,11 +13979,11 @@ esac
         <p>
           Pętle w programowaniu służa wykonywaniu powtarzalnych czynności
           pod pewnym warunkiem. W bloku pętli element warunku
-          (najprawdopodobniej) ulega zmiania, tak aby pętla zakończyła się
+          (najprawdopodobniej) ulega zmianie, tak aby pętla zakończyła się
           i interpretacja programu wróciła na właściwy tor. Jeśli tak się nie
           dzieje, to wówczas mamy doczynienia z nieskończoną pętlą, tego typu
-          konstrukcje nie zawsze muszą oznaczać pełnego wykorzystania zasobów
-          komputera, w zależności co znajduje się w ich bloku kodu. W BASH-u
+          konstrukcje nie zawsze muszą oznaczać błąd programisty, mogą być one
+          pożądne, w zależności co znajduje się w ich bloku kodu. W BASH-u
           dość często wykorzystywane są dwa rodzaje pętli.
         </p>
         <h3 id="18.4.1.whileloop">18.4.1. Pętla while</h3>
@@ -13976,8 +13997,8 @@ esac
           zmiana jest użależniona od określonego warunku. Ze względu na to, iż
           warunek pętli musi być prawdą, aby mogła ona w ogóle rozpocząć
           działanie - licznik musi zostać zdefiniowany przed pętlą. Poniżej
-          znajduje się przykładowa konstrukcja pętli while wyświetlająca
-          kwadraty pierwszych 10 dodatnich liczb.
+          znajduje się przykładowa konstrukcja pętli <em>while</em> 
+          wyświetlająca kwadraty pierwszych 10 dodatnich liczb.
         </p>
 <pre class="code-block">
 count=1
@@ -14019,7 +14040,7 @@ for i in 1 2 3 4 5 6 7 8 9 10; do
 done
 </pre>
         <p>
-          W tym przypadku list została zapisana z ręki (<em>hardcoded</em>).
+          W tym przypadku lista została zapisana z ręki (<em>hardcoded</em>).
           Jednak tutaj panuje duża elastyczność, listę możemy przekazać zmienną
           lub w postaci podstawienia polecenia. Wykonanie zadania zostało
           skompresowane do pojedynczej linii.
@@ -14031,15 +14052,18 @@ done
           wykona się co najmniej raz, ponieważ sprawdzanie warunku występuje
           poniżej bloku kodu pętli, kiedy zostaną wykonane jej instrukcje
           wówczas będzie można określić czy warunek zwraca kod wyjścia 0 czy
-          też inny. Kolejną z pętli jest pętla <em>select</em>, która na
+          też inny.
+        </p>
+        <p>
+          Kolejną z pętli jest <em>select</em>, która na
           podstawie listy wyświetla menu, oddając wykonanie programu pod
           interaktywną decyzję użytkownika. Użytkownik wybierając odpowiedni
           numer ustawia wartość przedstawioną w tym przypadku do zmiennej,
-          do której można się odwołać w bloku kodu pętli. Powtarzalność tej
+          do której można się odwołać w bloku pętli. Powtarzalność tej
           konstrukcji, polega na tym, że będzie ona ciągle pytać użytkownika o
           wybór do momentu, aż nie przerwiemy wykonania całego skryptu lub
-          w bloku kodu funkcji zaimplementujemy warunek, że jeśli została
-          wybrana powiedzmy litera 'q', to zakończ pętlę. Poniższy przykład
+          w kodzie pętli zaimplementujemy warunek, że jeśli została
+          wybrana powiedzmy litera 'q', to zakończ pętle. Poniższy przykład
           wyświetla nazwy kolorów dostępnych do wyświetlenia w powłoce,
           po wybraniu koloru, zostanie wyświetlona jego próbka.
         </p>
@@ -14114,7 +14138,7 @@ square 4;
           Korzystając z możliwości tworzenia funkcji może się okazać, że jest
           ich całkiem spora ilość i dużo lepszym sposobem na zarządzanie nimi
           jest przeniesienie do innego pliku. Wówczas aby móc dalej korzystać
-          z tych funkcji muszą być one dostępne dla skryptu w którym będą
+          z tych funkcji muszą być one dostępne dla skryptu, w którym będą
           wywoływane. W BASH-u nie mamy takich poleceń jak <em>include</em> czy
           <em>import</em>. Tutaj musimy posłużyć się <strong>wywołaniem skryptu
           w tym samym proces powłoki</strong>, dzięki temu obszar pamięci
@@ -14134,7 +14158,7 @@ source functions.sh
 . functions.sh
 </pre>
         <p>
-          Drugi sposób nie jest tożamy z takim zapisem jak:
+          Drugi sposób nie jest tożsamy z takim zapisem jak:
           <code class="code-inline">./functions.sh</code>. Tym przypadku
           kropka została użyta jako element ścieżki. My będziemy
           wykorzystywać ją jako polecenie.
@@ -14169,15 +14193,17 @@ source functions.sh
           Samo narzędzie AWK jest języka programowania operującym na tekstach.
           Nie mniej jednak, nie będziemy skupiać się na szczegółach tego
           narzędzia. Wykorzystamy jedną z jego funkcjonalności. Wspomniane
-          wcześniej ma jedną zasadniczą wadę, możemy miec problem z określeniem
+          wcześniej rozwiązanie związane z poleceniem <em>cut</em>
+          ma jedną zasadniczą wadę, możemy miec problem z określeniem
           żądanego pola, w momencie gdy znak ogranicznika występuje po sobie
           kilka razy. Najczęściej jest tak z białymi znakami
           (spacją oraz znakami tabulacji). Wówczas możemy skorzystać z pól
           prezentowanych przez narzędzie AWK, pola tego narzędzia są tak
-          naprawdę kolumnami, więc zadbać o odseparowanie konkretnej linii.
+          naprawdę kolumnami, więc należy zadbać o odseparowanie konkretnej
+          linii.
           Tutaj podział jest prosty, każda kolumna rozpoczyna się od każdego
           innego znaku nie będącego tabulatorem lub spacją. Numer kolumny
-          po znaku dolara, tak jak na poniższym przykładzie.
+          podajemy po znaku dolara, tak jak na poniższym przykładzie.
         </p>
 <pre class="code-block">
 ... | awk '{printf $1}' | ...
@@ -14201,16 +14227,16 @@ source functions.sh
           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
+          W plikach może zajść taka potrzeba, aby zmienić pewien zapis tylko
+          w jednej 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
+          numer linii. Wyrażenie regularne sprawdzi się 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
+          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>
@@ -14232,13 +14258,15 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
         <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>.
+          musi on otworzyć plik i działać na nim w pamięci. Aby nasze zamiany
+          faktycznie miały jakiś skutek musimy 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.
+          jest identyczna z <em>insert</em>, zmianie ulega tylko literka
+          wskazująca polecenie, 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.
@@ -14246,7 +14274,7 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
         <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
+          nie ma w tym nic dziwnego, warto jednak 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: 
@@ -14255,9 +14283,9 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
 $ sed '1,12p' test.txt
 </pre>
         <p>
-          Tutaj istotną role pełni cytowanie. Jeśli checielibyśmy wyświetlić
+          Tutaj istotną rolę 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>.
+          wyglądać 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
@@ -14285,7 +14313,7 @@ $ sed "1,${a}p" test.txt
 $ sed "s/ala/ola/" test.txt
 </pre>
         <p>
-          Po polecenie <code class="code-inline">s</code> występuje separator,
+          Po poleceniu <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