2 Podstawowe polecenia

2.5 Narzędzia tekstowe

Opis narzędzi służących do wyświetlania i modyfikowania zawartości plików tekstowych można znaleźć w dokumentacji systemowej pod hasłem textutils.

2.5.1 Najważniejsze polecenia

cat

wyświetla zawartość strumienia wejściowego lub zawartość plików
Postać: cat [opcje] [plik…]

Przykład:
$ cat /etc/passwd
wyświetli zawartość pliku /etc/passwd. Polecenie cat może też posłużyć do tworzenia plików tekstowych
$ cat > pliktekstowy
to jest tekst
który zostanie umieszczony
w pliku o nazwie pliktekstowy
Aby zakończyć wciśnij Ctrl+ D
lub do łączenia kilku plików w jedną całość - rezultat można przekierować do pliku:
$ cat pliktekstowy dane.txt > nowy.txt

more

wyświetla zawartość pliku strona po stronie
Postać: more [opcje] plik
Przykład:
$ more /etc/passwd
wyświetli zawartość pliku passwd
$ ls /bin | more
pozwala przejrzeć listę plików w katalogu /bin

less

wyświetl zawartość pliku strona po stronie
Postać: less [opcje] plik
Jest to ulepszona wersja polecenia more pozwalająca poruszać się po pliku zarówno w przód jak i w tył.
Przykład:
$ less /etc/passwd

Programy more i less posiadają wiele funkcji dostępnych za pomocą skrótów klawiszowych o których możemy się dowiedzieć wciskając h. Inne przydatne funkcje uzyskamy wciskając: q - wyjście z programu, /wyrażenie - poszukuje wyrażenia w pliku, n - szuka następnego wystąpienia.

head

wyświetla początek pliku
Postać: head [opcje] plik…
Przykład:
$ head /etc/passwd
wyświetli 10 pierwszych linii pliku passwd
Najważniejsze opcje:
-n liczba wyświetli określoną liczbę początkowych linii
-c liczba wyświetli określona liczbę początkowych znaków
Przykład:
$ head -c 10 /etc/passwd
wyświetli 10 pierwszych znaków pliku passwd
$ ls | head -n 3
wyświetli nazwy trzech pierwszych plików z bieżącego katalogu

tail

wyświetla koniec pliku
Postać: tail [opcje] plik…
Działanie i opcje takie same jak w poleceniu head z tą różnicą, że wyświetlane jest zakończenie pliku.
Przykład:
$ tail -n 4 /etc/passwd
wyświetli cztery ostatnie linie pliku passwd

cmp

porównuje pliki znak po znaku
Postać: cmp [opcje] plik1 plik2
Polecenie wyświetla pozycje pierwszego napotkanego znaku (bajtu) różniącego oba pliki.
Przykład:
$ cmp plik1.txt plik2.txt
plik1.txt plik2.txt różnią się: bajt 30 linia 2
Najważniejsze opcje:
-c wypisuje różniące się znaki

diff

znajduje różnice pomiędzy plikami taktowymi
Postać: diff [opcje] plik1 plik2
Przykład:
$ diff plik1.txt plik2.txt

Wynikiem działania jest wyświetlenie fragmentów tekstu, które są różne w obu plikach wraz z informacją jak należy zmienić pierwszy z plików aby otrzymać drugi z użyciem 3 operacji: zamień (c), usuń (d), dodaj (a) fragment tekstu.
Przykładowo komunikat 1,10c2,5 oznacza, że należy zamienić linie od 1 do 10 w pierwszym pliku na tekst który występuje w liniach od 2 do 5 w drugim pliku. 3a5 oznacza, że w linii trzeciej pierwszego pliku należy dodać 5 linię z drugiego pliku
Wyjście programu diff tworzy łatkę, którą można zaaplikować za pomocą polecenia patch na drugim pliku aby jego zawartość uczynić identyczną z zawartością pliku pierwszego.
Przykład:
$ diff plik1 plik2 > patch.txt
$ patch plik1 patch.txt

patch

aplikuje łatkę z programu diff na pliku tekstowym
Postać: patch plikoryginalny plikzłatką

wc

liczy ilość znaków, słów i linii w pliku
Postać: wc [opcje] plik…
Najważniejsze opcje:
-c drukuje liczbę znaków/bajtów w pliku
-w drukuje liczbę wyrazów w pliku
-l drukuje ilość linii w pliku
Przykład:
$ wc -c dane.txt
wyświetli ilość bajtów zajętych przez plik
Przykład:
$ wc -l *.txt
wyświetli liczbę linii we wszystkich plikach o rozszerzeniu .txt znajdujących się w bieżącym katalogu.
$ ls /bin/ | wc -l
zwróci liczbę plików w katalogu /bin/.

sort

wypisuje posortowaną zawartość pliku tekstowego
Postać: sort [opcje] plik…
Przykład:
$ sort dane.txt > posortowane.txt
spowoduje posortowanie linii zawartych w pliku dane.txt i przesłanie wyniku do pliku posortowane.txt
Niektóre opcje:
-r odwraca kolejność sortowania
-u usuwa duplikaty
-f wyłącza rozróżnianie małych i dużych liter
-n sortowanie liczb (standardowo dane sortowane traktowane są jako ciągi znaków)
Przykład:
$ du . | sort -n
wyświetli listę plików w bieżącym katalogu posortowaną według rozmiaru
+liczba pozwala pominąć przy sortowaniu określoną liczbę pól (pola standardowo są rozdzielone białymi znakami (przestarzała wersja))
-k poz1[,poz2] pozwala specyfikować względem którego pola (kolumny) chcemy sortować
-t separator używa podanego znaku jako separatora pól (kolumn)
Przykład:
$ ls -l | sort +4 -n
wyświetli posortowaną listę plików według piątej kolumny otrzymanej za pomocą polecenia ls -l
$ sort -k 5 -t : /etc/passwd
Wyświetli posortowana listę użytkowników (piąta kolumna pliku passwd, gdzie kolumny sa oddzielone dwukropkami).

grep

wyświetla linie pasujące do wzorca
Postać: grep [opcje] wzorzec [plik…]

Przykład:
$ grep student /etc/passwd
wyświetli linie z pliku /etc/passwd zawierającą słowo ”student”
Często stosuje się to polecenie jako filtr w strumieniu, np:
$ ls /bin | grep z | wc -l
wyświetli liczbę plików z katalogu bin zawierających w nazwie literę ”z”
Najważniejsze opcje:
-v wyświetlane są wiersze w których wzorzec nie pojawia się
-l wyświetli tylko nazwę pliku w którym znaleziono wzorzec
-i nie rozróżnia dużych i małych liter we wzorcu
-A n wyświetla także n kolejnych linii
-B n wyświetla także n poprzedzających linii

cut

Wypisuje wybrane fragmenty linii
Postać: cut [opcja]... [plik]...
Niektóre opcje:
-b N wypisuje tylko podane bajty
-f N wypisuje tylko podane kolumny (standardowo separatorami kolumn są białe znaki)
-d znak użyj podanego znaku jako separatora kolumn
Przykład:
$ cut -c 1 /etc/passwd
wyświetli tylko pierwszy znak z każdej linii.
$ cut -c 4-7 plik
wyświetli znaki od 4-go do 7-go.
$ cut -f 2- plik
Wyświetli linie bez pierwszej kolumny
$ cut -d : -f 5 /etc/passwd
wyświetli imiona i nazwiska użytkowników (5 kolumna pliku passwd, gdzie kolumny oddzielone są dwukropkiem).

paste

łączy linie plików
Postać: paste pliki...

Przykładowo:
$ paste plik1 plik2
wypisze na standardowym wyjścuiu połoczone zawratości obu plików.

tr

Zamienia znaki wczytane ze standardowego wejścia.
Postać: tr łańcuch1 łańcuch2
tr -d łańcuch
tr -s łańcuch

Najważniejsze opcje:
-d usuń podane w łańcuchu znaki
-s usuń wielokrotne wystąpienia tych samych znaków
Przykład:
$ echo $PATH | tr : ' '
wyświetla wartość zmiennej $PATH zastępując dwukropki spacjami.
$ echo Witaj swiecie | tr ai ia
w podanym haśle zamienia literę ’i’ na ’a’ oraz literę ’a’ na ’i’
$ echo Witaj swiecie | tr [a-z] [A-Z]
zamienia małe litery na duże
$ cat plik | tr -d ' '
usuwa spacje z pliku
$ cat plik | tr -s ' '
usuwa powtórzenia spacji w pliku

Inne przydatne polecenia i narzędzia (textutils): nano, emacs, vi, vim, awk, join, paste, tac, nl, od, split, csplit, uniq, comm, ptx, tsort, tr, fold

2.5.2 Przekierowanie standardowego wejścia i wyjścia programu

polecenie > plik
przekierowanie wyjścia programu do pliku (zawartość pliku zostanie nadpisana)

polecenie >> plik
przekierowanie wyjścia programu z dopisywaniem do pliku

polecenie 2> plik
przekierowanie wyjścia diagnostycznego do pliku

polecenie >& plik
przekierowanie wyjścia standardowego i diagnostycznego do pliku

polecenie < plik
przekierowanie wejścia programu z pliku

polecenie << słowo
przekierowanie wejścia programu z klawiatury do momentu wystąpienia danego słowa

Przykłady:
$ ls /etc > lista
$ head -n 3 /etc/passwd >>̇ lista
$ haed -n 3 /etc/passwd >& lista
$ cat < lista
$ cat < lista > nowalista
$ cat << KONIEC > tekst
To jest pewien tekst
KONIEC

2.5.3 Potoki

polecenie1 | polecenie2
połączenie wyjścia programu 1 z wejściem programu 2

Przykłady:
$ cat /etc/passwd | wc -l
$ grep Marek /etc/passwd | cut -f 5 -d : | sort | head -n 1 > wybraniec

tee

czyta standardowe wejście i przesyła je na standardowe wyjście oraz do pliku.
Postać: tee [-a] plik
Najważniejsze opcje:
-a dopisuje zawartość strumienia wyjściowego do pliku (bez tej opcji zawartość pliku zostałaby nadpisana)
Przykład:
$ grep Marek /etc/passwd | tee plik1.txt | wc -l
zapisze linie z pliku /etc/passwd zawierające słowo marek w pliku plik1.txt, zaś na ekranie wyświetlona zostanie ilość tych linii.

2.5.4 Podstawianie wyników polecenia

Uruchomienie polecenia w postaci $(polecenie) powoduje podstawienie standardowego wyjścia polecenia w miejsce wywołania. Identyczny działenie można uzyskać róznież umieszczając polecenie pomiędzy znakami `` (pochyłe ”uszy”). Pozwala to miedzy innymi na zapisanie wyniku programu w zmiennej, np,:
$ a=$(ls /bin)
lub uzycie wyjścia polecenia jako argumentów innego polecenia, np,:
$ echo `ls /bin`
Chcąc usunąc pliki, których nazwy zawarte są w pliku tekstowym, można to osiągnąc poleceniem: $ rm $(cat lista_plikow.txt)

2.5.5 Ćwiczenia

  1. 1.

    Korzystając z polecenia cat utwórz krótką notatkę tekstowa w pliku tekst.txt.

  2. 2.

    Korzystając z polecenia cat skopuj plik tekst.txt pod nazwą tekst2.txt

  3. 3.

    Korzystając z polecenia cat oraz pliku /etc/passwd utwórz plik users.txt zawierający posortowaną listę użytkowników (imiona i nazwiska). Wyświetl użytkowników których nazwiska kończą się literami ski.

  4. 4.

    Wyświetl plik (katalog) z twojego katalogu domowego o największej objętości

  5. 5.

    Wyświetl całkowitą liczbę plików znajdujących się w katalogach wymienionych w zmiennej $PATH

  6. 6.

    Polecenie ps -A wyświetla listę wszystkich uruchomionych procesów. Wykorzystaj to polecenie do stworzenia pliku procesy.txt zawierającego listę posortowanych i niepowtarzających się nazw działających procesów

  7. 7.

    Połącz wszystkie pliki tekstowe *.txt z bieżącego katalogu w jeden plik o nazwie calosc.txt