SED:
AWK:
Definiowanie wyrażeń regularnych:
. ? * + ^ | $ () [] {} \
$
.Przykłady:
Jeżeli chcesz pobawić się wyrażeniami regularnymi to warto odwiedzić: Regex Crossword
Jeżeli po prostu chcesz przetestować i zrozumieć wyrażenia regularne to w sieci dostępnych jest wiele webowych serwisów, które pozwalają na wpisanie wyrażenia, wyjaśniają jego poszczególne elementy i wyświetlają dopasowania na tekście, np.:
Przeczytaj manual do programu. Zwróć uwagę na polecenia, ich składnię oraz sposób adresacji poleceń.
/etc/passwd
na spację./etc/passwd
/etc/passwd
/etc/passwd
./etc/passwd
opisujące osoby mające login zaczynający się na 'z'./etc/passwd
opisujące osoby mające login zaczynający się na 'w' lub 'z'.grep -v
? np. dla frazy 'lo' (grep -v lo /etc/networks
)root
na twój login (przetestuj na pliku /etc/passwd
)?/etc/networks
./etc/mime.types
zaczynające się od video
i wyświetl ich numer.cut -d: -f2
.cat -n
./bin/tcsh
dla wszystkich użytkowników posiadającym folder domowy /nonexistent
(zmodyfikuje odpowiednio plik /etc/passwd
). Skrypt ma wydrukować całą zawartość zmienionego pliku na ekranie wraz z zaznaczeniem zmienionych linii - tak jak jest to przedstawione poniżej:---------------------------- linia w której nastąpiła zmiana powłoki ----------------------------
/etc/passwd
w odwrotnej kolejności.FS
, RS
, NF
, NR
, OFS
, ORS
?BEGIN
oraz END
w przypadku kiedy zródło danych składa się z wielu plików?#!/bin/sh who | awk '{print $1}' | sort | uniq | xargs -i"{}" grep -e "^{}:" /etc/passwd | awk -f awkuserlist
oraz plik awkuserlist (skrypt programu awk) który jest w nim wykorzystany:
BEGIN { FS=":" print "<xml version="1.0">"; } { match($5, "^[^, ]*"); imie=substr($5, RSTART, RLENGTH); match($5, " [^, ]*"); nazwisko=substr($5, RSTART+1, RLENGTH-1); login=$1; uid=$3; gid=$4; home=$6; shell=$7; print "<osoba>"; print "<imie>"imie"</imie>"; print "<nazwisko>"nazwisko"</nazwisko>"; print "<login>"login"</login>"; print "<uid>"uid"</uid>"; print "<gid>"gid"</gid>"; print "<home>"home"</home>"; print "<shell>"shell"</shell>"; print "</osoba>"; } END { print "</xml>"; }
who | awk '{print $1}'
) przez fragment, który wprost zadaje przykładowe loginy z /etc/passwd (np. echo -e 'root\ngames\nman'
)<osoba> <dana1>wartosc1</dana1> <dana2>wartosc2</dana2> <dana3>wartosc3</dana3> <dana4>wartosc4</dana4> </osoba>
------------------------------------------- dana1: wartosc1 dana2: wartosc2 dana3: wartosc3 dana4: wartosc4 -------------------------------------------
<osoba> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko> <login>jkowalski</login> <uid>1</uid> <gid>1</gid> <home>/home/users/jkowalski</home> <shell>/bin/bash</shell> <miasto>Kraków</miasto> </osoba>
------------------------------------------- imie: Jan nazwisko: Kowalski login: jkowalski uid: 1 gid: 1 home: /home/users/jkowalski shell: /bin/bash miasto: Kraków -------------------------------------------
@rodzaj{klucz, author = {wartość}, title = {wartość}, year = wartość, other = {wartość} }
bash
o nazwie szukaj
, który przy użyciu awk
wybierze z pliku publikacje.bib
tylko te wpisy bibliograficzne, które odpowiadają zapytaniu użytkownika. Skrypt powinien obsługiwać trzy opcje (-a
, -t
, -k
):./szukaj -a Nalepa
- wyszuka wszystkie publikacje autorstwa Nalepy (te wpisy bibtexowe, w których polu author
występuje Nalepa
),./szukaj -t slowo
- wyszuka wszystkie publikacje zawierające w tytule ciąg slowo
,./szukaj -k slowo
- wyszuka wszystkie publikacje zawierające ciąg slowo
w dowolnym polu.login_1:ocena_1,ocena_2,ocena_3 login_2:ocena_1,ocena_2,ocena_3,ocena_4
login_n
- jest loginem danego studentaocena_n
- oznacza ocenę, liczbę ze zbioru {2.0, 3.0, 3.5, 4.0, 4.5, 5.0}
(nie ma przymusu sprawdzania poprawności - przyjmujemy że oceny są wpisane poprawnie).Srednia ocena dla Login: X
gdzie X
to wartość średniej oceny z dokładnością do dwóch miejsc po przecinku.
spock:4.0, 4.5, 4.5, 5.0, 5.0, 2.0 scotty : 4.5, 3.0, 4.0, 3.5, 5.0, 2.0, 5.0, 5.0, 4.5 sulu:3.5 , 3.0, 5.0, 4.5, 2.0, 3.5, 4.5, 3.0, 2.0, 4.5, 4.0, 5.0, 2.0, 5.0, 3.5, 4.5, 5.0, 5.0, 4.5, 4.0, 5.0, 3.5, 5.0, 5.0, 5.0, 4.5, 5.0, 3.5, 3.5, 4.0, 4.0, 3.5, 4.0, 5.0, 3.0, 3.0 chekov:2.0, 4.5, 5.0 , 5.0, 4.0, 5.0, 5.0, 2.0, 3.0, 4.5 yar:3.0, 2.0, 5.0, 2.0, 3.0, 5.0, 3.0, 4.5, 5.0, 5.0, 5.0, 5.0, 4.5, 3.5, 2.0, 3.5, 4.0, 3.5, 2.0 enterprise:3.5, 2.0, 3.0, 3.0 riker : 3.0, 3.0, 3.0, 2.0, 4.0, 2.0, 5.0, 5.0, 4.0, 2.0, 5.0, 3.5, 3.0, 2.0, 2.0, 4.5, 4.5, 5.0, 3.5, 4.5, 3.5, 4.5, 3.0, 5.0, 5.0, 3.0, 3.5, 3.5, 5.0, 5.0, 4.5, 3.0, 2.0, 5.0, 5.0, 3.0, 4.5, 3.0 picard : 3.0 , 3.0, 3.0, 4.0, 3.5, 4.0, 3.0, 5.0, 5.0, 4.5, 4.0 laforge: 4.0, 4.5, 5.0, 3.5, 4.5, 4.5, 4.5, 2.0, 3.0, 3.0, 3.5 yoda:3.5, 4.0, 4.5, 4.5, 2.0 worf :2.0, 5.0, 4.0, 4.0, 3.5, 4.5 , 5.0 starfleet:5.0, 4.5, 3.5, 3.0, 4.0, 3.0, 4.0, 2.0, 3.0, 2.0, 5.0, 2.0, 3.5, 4.5, 4.5, 4.0, 3.0, 3.0, 3.5, 3.0, 3.0, 3.5, 2.0, 3.0, 3.5, 4.0, 4.5, 5.0, 3.5, 5.0, 3.5, 3.5, 3.5, 3.0, 5.0, 3.5, 4.5, 3.0, 4.5, 4.5, 5.0, 4.5, 3.5, 2.0, 3.0, 3.0, 4.0, 5.0, 5.0 kirk:4.0, 3.0, 5.0, 5.0, 5.0, 2.0, 2.0, 4.0 uhura : 3.5, 2.0, 5.0, 5.0, 5.0 , 4.0, 5.0, 5.0, 4.0, 4.5, 3.0, 3.0, 3.5, 4.0, 3.5, 4.0, 5.0, 4.0, 3.0, 4.5, 4.5, 5.0, 3.5, 4.0, 4.5, 5.0, 5.0, 5.0, 3.0, 5.0, 4.0, 4.0, 5.0, 4.5, 5.0, 3.0, 4.0, 5.0, 4.5, 2.0, 4.5, 5.0, 4.0, 3.0, 3.0, 4.5, 2.0, 2.0, 3.0, 3.5, 5.0
Srednia ocen dla spock: 4.17 Srednia ocen dla scotty: 4.06 Srednia ocen dla sulu: 4.01 Srednia ocen dla chekov: 4 Srednia ocen dla yar: 3.71 Srednia ocen dla enterprise: 2.88 Srednia ocen dla riker: 3.72 Srednia ocen dla picard: 3.82 Srednia ocen dla laforge: 3.82 Srednia ocen dla yoda: 3.70 Srednia ocen dla worf: 4 Srednia ocen dla starfleet: 3.68 Srednia ocen dla kirk: 3.75 Srednia ocen dla uhura: 4.03