Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
Nowa wersja
Both sides next revision
|
pl:dydaktyka:unix:lab_sed_awk [2013/11/13 13:04] ikaf [Definiowanie wyrażeń regularnych] |
pl:dydaktyka:unix:lab_sed_awk [2017/11/13 11:14] kkutt [SED] |
====== SED i AWK ====== | ====== SED i AWK ====== |
| |
| {{:pl:dydaktyka:unix:evolution_of_language.gif?400|}} |
===== Do przygotowania ===== | ===== Do przygotowania ===== |
* Przypomnieć sobie pracę z jednym z wybranych edytorów (np. vi, emacs, itp). | * Przypomnieć sobie pracę z jednym z wybranych edytorów (np. vi, emacs, itp). |
* Przypomnieć sobie funkcję manipulujące łańcuchami znaków w języku C. | * Przypomnieć sobie funkcję manipulujące łańcuchami znaków w języku C. |
* Przeczytać następujące artykuły: | * Przeczytać następujące artykuły: |
* Artykuł o //sed//: [[http://www.gentoo.org/doc/pl/articles/l-sed1.xml|część 1]], [[http://www.gentoo.org/doc/pl/articles/l-sed2.xml|część 2]], [[http://www.gentoo.org/doc/pl/articles/l-sed3.xml|część 3]] | * Artykuł o //sed//: [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-sed1.xml|część 1]], [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-sed2.xml|część 2]], [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-sed3.xml|część 3]] |
* Artykuł o //awk//: [[http://www.gentoo.org/doc/pl/articles/l-awk1.xml|część 1]], [[http://www.gentoo.org/doc/pl/articles/l-awk2.xml|część 2]], [[http://www.gentoo.org/doc/pl/articles/l-awk3.xml|część 3]] | * Artykuł o //awk//: [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-awk1.xml|część 1]], [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-awk2.xml|część 2]], [[http://gentoo-handbook.lugons.org/doc/pl/articles/l-awk3.xml|część 3]] |
* Wersja angielska: | * Wersja angielska: |
* Artykuł o //sed//: [[http://www.ibm.com/developerworks/linux/library/l-sed1.html|część 1]], [[http://www.ibm.com/developerworks/linux/library/l-sed2.html|część 2]], [[http://www.ibm.com/developerworks/linux/library/l-sed3.html|część 3]]. | * Artykuł o //sed//: [[https://www.ibm.com/developerworks/linux/library/l-sed1/index.html|część 1]], [[https://www.ibm.com/developerworks/linux/library/l-sed2/index.html|część 2]], [[https://www.ibm.com/developerworks/linux/library/l-sed3/index.html|część 3]]. |
* Artykuł o //awk//: [[http://www.ibm.com/developerworks/linux/library/l-awk1.html|część 1]], [[http://www.ibm.com/developerworks/linux/library/l-awk2.html|część 2]], [[http://www.ibm.com/developerworks/linux/library/l-awk3.html|część 3]]. | * Artykuł o //awk//: [[https://www.ibm.com/developerworks/linux/library/l-awk1/index.html|część 1]], [[https://www.ibm.com/developerworks/linux/library/l-awk2/index.html|część 2]], [[https://www.ibm.com/developerworks/linux/library/l-awk3/index.html|część 3]]. |
| |
===== Wprowadzenie ===== | ===== Wprowadzenie ===== |
===== Definiowanie wyrażeń regularnych ===== | ===== Definiowanie wyrażeń regularnych ===== |
* Wyrażenia regularne składają się dwóch podstawowych zestawów znaków: | * Wyrażenia regularne składają się dwóch podstawowych zestawów znaków: |
* Znaki kontrolne: . ? * + ^ | $ () [] {} \ | * Znaki kontrolne: ''. ? * + ^ | $ () [] {} \'' |
* Zwykłe znaki: pozostałe | * Zwykłe znaki: pozostałe |
* Kolejność znaków w wyrażeniu jest **istotna**. | * Kolejność znaków w wyrażeniu jest **istotna**. |
* {,6} - co najwyżej 6 razy. | * {,6} - co najwyżej 6 razy. |
* Pionowa kreska (ang. pipeline) | to operator OR np. jeśli napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystąpić a lub b lub c. | * Pionowa kreska (ang. pipeline) | to operator OR np. jeśli napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystąpić a lub b lub c. |
* Jeżeli chcemy użyć jednego ze znaków kontrolnych jako zwykłego to poprzedzamy go backslash-em **\** np: **^\$** definiuje wszystkie łańcuchy znaków rozpoczynające się od znaku dolara $. | * Jeżeli chcemy użyć jednego ze znaków kontrolnych jako zwykłego to poprzedzamy go backslash-em **\** np: **^\$** definiuje wszystkie łańcuchy znaków rozpoczynające się od znaku dolara ''$''. |
| |
| |
==== Przykłady ==== | ==== Przykłady ==== |
=== Kod pocztowy === | === Kod pocztowy === |
===== Ćwiczenia ===== | ===== Ćwiczenia ===== |
==== SED ==== | ==== SED ==== |
- Przeczytać manual do programu. Zwrócić uwagę na polecenia, ich składnię oraz sposób adresacji poleceń. | |
| Przeczytać manual do programu. Zwrócić uwagę na polecenia, ich składnię oraz sposób adresacji poleceń. |
- Wyświetlić plik **/etc/passwd** przy pomocy //sed//. | - Wyświetlić plik **/etc/passwd** przy pomocy //sed//. |
- Zamienić separator - dwukropek - w pliku ''/etc/passwd'' na spację. | - Zamienić separator - dwukropek - w pliku ''/etc/passwd'' na spację. |
- Wyświetlić **tylko** nazwy użytkowników zapisanych w pliku ''/etc/passwd'' | - Wyświetlić **tylko** loginy użytkowników zapisanych w pliku ''/etc/passwd'' |
- Wyświetlić 4, 7, 10 i 13 linię pliku ''/etc/passwd'' | - Wyświetlić 4, 7, 10 i 13 linię pliku ''/etc/passwd'' |
- Wyświetlić określone przedziałem (np. od 3. do 5. włącznie) linie pliku ''/etc/passwd''. | - Wyświetlić określone przedziałem (np. od 3. do 5. włącznie) linie pliku ''/etc/passwd''. |
- Wyświetlić linie pliku ''/etc/passwd'' opisujące osoby mające login zaczynający się na 'z'. | - Wyświetlić linie pliku ''/etc/passwd'' opisujące osoby mające login zaczynający się na 'z'. |
- Wyświetlić linie pliku ''/etc/passwd'' opisujące osoby mające login zaczynający się na 'q' lub 'z'. | - Wyświetlić linie pliku ''/etc/passwd'' opisujące osoby mające login zaczynający się na 'w' lub 'z'. |
- Jak przy pomocy sed zaimitować polecenie ''grep -v''? np. dla frazy 'lo' (''grep -v lo /etc/networks'') | - Jak przy pomocy sed zaimitować polecenie ''grep -v''? np. dla frazy 'lo' (''grep -v lo /etc/networks'') |
- Jak zamienić w pliku wszystkie słowa ''root'' na twój login (przetestuj na pliku ''/etc/aliases'')? | - Jak zamienić w pliku wszystkie słowa ''root'' na twój login (przetestuj na pliku ''/etc/aliases'')? |
- Jak zamienić przy pomocy sed wszystkie litery 'r' na 'k'? | - Jak zamienić przy pomocy sed wszystkie litery 'r' na 'k'? |
- W jaki sposób zakodować szyfrem ROT13 plik przy pomocy sed (szyfr zamienia litery na występujące 13 liter dalej, np. a<->n, b<->o, itd.)? | - W jaki sposób zakodować szyfrem ROT13 plik przy pomocy sed (szyfr zamienia litery na występujące 13 liter dalej, np. a<->n, b<->o, itd.)? |
- Przy pomocy polecenia sed zakomentuj linijkę default w pliku ''/etc/networks''. | - Przy pomocy polecenia sed zakomentuj linijkę link-local w pliku ''/etc/networks''. |
- 8-o W jaki sposób przy użyciu sed wstawić kolumnę X po pierwszym znaku wiersza (dodatkowy znak X w każdym wierszu)? A jak po piątym? | - 8-o W jaki sposób przy użyciu sed wstawić kolumnę X po pierwszym znaku wiersza (dodatkowy znak X w każdym wierszu)? A jak po piątym? |
- Jak przy pomocy sed powtórzyć 3 razy pierwsze dwie litery każdego wiersza w pliku? | - Jak przy pomocy sed powtórzyć 3 razy pierwsze dwie litery każdego wiersza w pliku? |
| |
\\ | \\ |
** 8-) 8-) 8-) 8-) 8-) 8-) Zadanie 3** \\ | ** 8-) 8-) 8-) Zadanie 3** \\ |
\\ | \\ |
Napisz skrypt programu awk który policzy i wyświetli średnią ocen dla każdego studenta. | Napisz skrypt programu awk który policzy i wyświetli średnią ocen dla każdego studenta. |