Elementy wyrażeń regularnych: znaki specjalne - zakotwiczenia Daszek "^" oznacza początek wiersza, dolar "$" oznacza koniec wiersza. np.: "^.o.a$" Wyrażenie odpowiada ciągowi dokładnie czterech znaków typu cola, soja, pola itd... występujących samotnie w wierszu "^Do.*zuk$" - Do biedronki przyszedl zuk Daszek "^" na początku zestawu oznacza wszystkie znaki oprócz tych z zestawu. Większość znaków specjalnych w tym miejscu traci swoje znaczenie np.: "[^piwo]" wyszukuje łańcuchy w których nie występuje piwo np.: "pi[^wk]o" wyklucza wyrażenia piwo piko ale nie wyklucza ciągu pilot 7
Kilka przykładów użycia: Wyrażenia regularne: praktyczne zastosowania jak wyszukać linie rozpoczynających się od cyfry? grep '^[0-9]' * jak wyszukać nazwy plików i numery linii kończących się na k lub K? grep -n '[kk]$' * jak wyświetlić nazwy plików nie zawierających wyrazów `plik'? grep -lwv 'plik' * co jeśli wzorzec zaczyna się od `-'? grep -e '--cut here--' * - szuka wszystkich linii pasujących do `--cut here--'. Bez `-e', grep próbowałby analizować `--cut here--' jako listę opcji. 25 rm Zad 2 more /etc/passwd grep '^w.*' grep 'inf-09' nl cut -d : -f 1,5 cut -d, -f 1 tee /home/inf-09/wbisko/\*kat1\*/\*kat2\*//\*kat3\*/\.lista wc -l Zad 3 more /etc/group grep -E '^tele ^i' sort -t : -k 2 -g > tele/home/inf-09/wbisko/\*kat1\*/\*kat5\*/\.grupy wc -l Zad 4 ls -lasi /home/inf-09/wbisko/\*kat1\*/\*kat5\*/ > /home/inf-09/wbisko/\*kat1\*//\*kat2\*//\*kat4\*/jeden ls -la /home/inf-09/wbisko/\*kat1\*/\*kat2\*/\*kat3\*/ > /home/inf-09/wbisko/\*kat1\*//\*kat2\*//\*kat4\*/dwa Zad 5 cat /home/inf-09/wbisko/\*kat1\*//\*kat2\*//\*kat4\*/jeden /home/inf-09/wbisko/\*kat1\*//\*kat2\*//\*kat4\*/dwa > /home/inf-09/wbisko/\*kat1\*/razem Zad 6 find /home/imk-prac/ \( -type f -size -13c -name '*\?plik\?*' \) -o \( -type d -name '\[Kolo1\]*' \) 2> /dev/null brakuje tu czasu modyfikacji oraz liczby znaków w nazwie pliku!! Zad 7 find /home/imk-prac/ -type f -size -13c -name '*\?plik\?*' -exec cp {} /home/inf-09/wbisko/\*kat1\*/\*kat2\*/\*kat4\*/ \; 2> /dev/null Zad 1 Będąc w katalogu domowym ~ mkdir -p..testa/..teste mkdir -p..testa/..testb/..testc mkdir -p..testa/..testb/..testd touch..testa/..teste/.plik\?\*.2..testa/..teste/.plik\?3.2 touch..testa/..testb/..testc/.plik\?\*.1
Zad 2. mv../../..teste/.plik\?\*.2../..testc/ Zad 3. kropka 1: Nic nie pojawiło się. Strumień czyli zawartość plików o nazwach rozpoczynających się na.plik? z folderu..testc (czyli dwa takie pliki) został dopisany na koniec konkretnego pliku o nazwie.plik?*.2 w folderze..teste (Pliku docelowego.plik?*.2 nie było w tym momenie, więc został utworzony). Kolejność plików źródłowych w strumieniu odwrotna od kolejności alfabetycznej ich nazw, czyli przekazywanego od ostatniego do pierwszego (od prawa do lewa) kropka 2: to jest aktualna zawartość pliku.plik?*.1 to jest aktualna zawartość pliku.plik?*.2 to jest aktualna zawartość pliku.plik?*.1 to jest aktualna zawartość pliku.plik?3.2 cat..testc/.plik\?\** wyświetla zawartość plików o nazwach rozpoczynających się na.plik?* w folderze testc (tutaj jest tylko jeden taki plik.plik?*.1 cat../..teste/.plik\?*.2 wyświetla zawartość plików o nazwach zaczynających się na.plik? i jednocześnie kończących się na.2 (z dowolnym ciągiem znaków pomiędzy nimi) w kolejności alfabetycznej nazw tych plików cat..testc/.plik\?\**../..teste/.plik\?*.2 wyświetla oba ww. strumienie w kolejności takiej jak podano w linii (od lewej do prawej)