Programowanie w Shellu (index)
Zbadać polecenia head i tail.
$ man head
$ info head
$ head /etc/passwd (wypisze pierwsze 10 linii)
$ head -n 5 /etc/passwd (wypisze pierwsze 5 linii)
$ head /etc/*conf
(wypisze pierwsze 10 linii każdego pliku i objaśniające
nagłówki z nazwami plików)
$ head -n 4 -q /etc/*conf
(wypisze po 4 linie bez nagłówkow plików)
$ ls | head -n 4 (czytanie w potoku ze stdin)
$ man tail
$ info tail
$ tail /etc/passwd (wypisze ostatnie 10 linii)
$ tail -n 5 /etc/passwd (wypisze ostatnie 5 linii)
$ tail /etc/*conf
(wypisze ostatnie 10 linii każdego pliku i objaśniąjace
nagłówki z nazwami plików)
$ tail -n 4 -q /etc/*conf
(po 4 ostatnie linie bez nagłówków plików;
można zmienić kolejność opcji: tail -q -n 4 )
$ tail -f plik1
(będzie wyświetlał nowe dane dopisywane do pliku)
$ ls | tail -n 3 (czytanie w potoku ze stdin)
$ head -n 6 /etc/passwd | tail -n 1 (wypisze linię 6 od początku)
$ tail -n 7 /etc/passwd | head -n 1 (wypisze linię 7 od końca)
Zbadać polecenie grep.
$ man grep
$ info grep
$ cat /etc/passwd (cały plik)
$ grep "bash" /etc/passwd (linie z "bash" w pliku)
$ grep -v "bash" /etc/passwd (szuka linii gdzie nie ma wzorca)
$ grep -n "bash" /etc/passwd (wypisze numery linii ze wzorem i linie)
$ grep -i wzorzec plik (utożsamia duże i małe litery)
$ ls / | grep "t$" (na końcu linii "t": boot, mnt, opt, root)
$ ls / | grep "^r" (linia zaczyna się na "r": root)
$ ls / | grep "r."
(obok siebie "r" i drugi znak: cdrom, proc, root;
kropka oznacza dowolny znak)
$ ls / | grep ".oo*"
(co najmniej jedno "o" po jakimś znaku: "opt" nie pasuje)
$ ls / | grep "ooo*" (co najmniej "oo" gdziekolwiek: boot, root)
$ ls / | grep "t."
("t" nie może być ostatnie: etc, tmp;
nie pasuje: opt, mnt, root)
$ grep "^[km]$" plik (lista)
$ grep -v "[0-9]" plik (wiersze bez cyfr - zakres)
$ grep "^[^tn]$" plik (dopasuj te, których nie ma t/n)
$ grep -v "[[:digit:]]" plik (wiersze bez cyfr - klasa znaków)
$ grep -v "^$" plik (wiersze niepuste)
$ grep "[[:upper:]]" plik (gdzieś jest duża litera)
$ grep "[A-Z]" plik
(jw, ale lepsza jest forma poprzednia, bo przenośna)
$ grep "^[[:lower:]]*$" plik (tylko małe litery w całym wierszu)
Zbadać edytor strumieniowy sed.
$ man sed
$ info sed
$ sed -n 'p' /etc/passwd (wyświetla zawartość pliku)
$ sed -n '3p' /etc/passwd (wyświetli tylko trzeci wiersz)
$ sed -n '2,4p' /etc/passwd (zakres: wiersze od 2 do 4)
$ sed -n '/bash/p' /etc/passwd (wiersze z łańcuchem 'bash')
$ sed -n '/^proxy/,/false$/p' /etc/passwd
(zakres określony przez dwa wyrażenia regularne)
$ sed -n '3!p' /etc/passwd (wszystko oprócz trzeciego wiersza)
$ sed '3d' /etc/passwd (skasuje trzeci, resztę wyświetli)
$ sed -n '/aaa/,/bbb/!p' plik1 (wiersze poza zakresem)
$ sed '/aaa/,/bbb/d' plik1 (skasuje zakres, resztę wyświetli)
$ sed -e 's/bash/shell/g' /etc/passwd
(zastąpienie w całym pliku; g [global] - aby zastąpił wszystkie
wystąpienia w danym wierszu)
$ sed -e '1,5s/bash/shell/g' /etc/passwd (zastapienie w wierszach 1-5)
$ sed -e '/student/ s/bash/shell/g' /etc/passwd
(zastąpienie tylko w wierszach z napisem 'student')
$ sed -e 's/[0-9][0-9]*/y/g' /etc/passwd
(zastąpienie ciągu cyfr przez literę 'y';
zastosowano wyrażenia regularne)
$ sed -f skrypt.sed plik1
(wczytanie poleceń z pliku skrypt.sed)