Operacje na plikach tekstowych z poziomu wiersza poleceń / terminala systemu Linux.
Polecenie cat
Narzędzie do konkatenacji (łączenia), tworzenia oraz wypisywania zawartości plików tekstowych.
student@student:~/Pulpit$ cat > plik1
Pierwszy plik
student@student:~/Pulpit$ cat > plik2
Drugi plik
student@student:~/Pulpit$ cat plik1 plik2
Pierwszy plik
Drugi plik
student@student:~/Pulpit$ cat plik1 plik2 > plik3
student@student:~/Pulpit$ cat plik3
Pierwszy plik
Drugi plik
student@student:~/Pulpit$ cat plik1 >> plik2
student@student:~/Pulpit$ cat plik2
Drugi plik
Pierwszy plik
student@student:~/Pulpit$ cat plik1
Pierwszy plik
student@student:~/Pulpit$ cat >> plik1
Dopiszmy cokolwiek nowego
student@student:~/Pulpit$ cat plik1
Pierwszy plik
Dopiszmy cokolwiek nowego
| cat > plik1 | utworzenie pliku plik1, następnie wprowadzenie jego zawartości, skrót Ctrl + D kończy wprowadzanie |
| cat plik1 plik2 | konkatenacja zawartości plików plik1 plik2 i przesłanie ich na standardowe wyjście |
| cat plik1 plik2 > plik3 | jak wyżej, jednak przesłanie zawartości do pliku plik3, jeśli plik3 nie istnieje – utworzenie pliku |
| cat plik1 >> plik2 | dopisanie zawartości pliku plik1 na koniec pliku plik2 |
| cat >> plik1 | dopisanie z klawiatury nowej zawartości do pliku plik1, Ctrl + D kończy wprowadzanie |
| cat plik1 | wypisanie na ekran zawartości pliku plik1 |
Polecenie tac wypisuje bądź dopisuje zawartość w odwrotnej kolejności linijek.
student@student:~/Pulpit$ cat plik1
Pierwszy plik
Dopiszmy cokolwiek nowego
student@student:~/Pulpit$ tac plik1
Dopiszmy cokolwiek nowego
Pierwszy plik
Polecenie echo
Wypisanie ciągu znaków na ekran.
student@student:~/Pulpit$ echo cokolwiek
cokolwiek
student@student:~/Pulpit$ echo cokolwiek > plik1
student@student:~/Pulpit$ cat plik1
cokolwiek
student@student:~/Pulpit$ echo cokolwiek2 >> plik1
student@student:~/Pulpit$ cat plik1
cokolwiek
cokolwiek2
| echo tekst | wypisanie tekstu na ekran |
| echo tekst > plik | przesłanie tekstu do pliku, nadpisanie zawartości, jeśli plik nie istnieje zostaje utworzony |
| echo tekst >> plik | dopisanie tekstu na koniec pliku |
Polecenie less
Praca z dużymi plikami, wyświetlanie zawartości z podziałem na strony.
Sposób wykorzystania:
less plik
cat plik | less
Polecenie head
Wyświetlenie podanej liczby linii z początku pliku.
Przykładowo wyświetlenie pierwszej linii (niezależnie od jej długości).
head -n 1 lorem
Lorem ipsum dolor sit amet magna. Vestibulum non purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per conubia nostra, per inceptos hymenaeos. Aenean augue commodo magna, tincidunt sapien. In lacus nonummy sodales rutrum, urna et turpis. Mauris magna diam, suscipit congue non, placerat semper, quam elit est, volutpat enim pharetra faucibus. Maecenas rhoncus. Praesent quis neque. Vestibulum egestas vitae, fringilla sollicitudin, odio ac purus. Phasellus orci ut malesuada quis, tincidunt wisi, ullamcorper varius ac, felis. Mauris pellentesque, justo nibh, eu neque nibh faucibus quis, tincidunt nulla. Sed fringilla turpis. Duis a nisl. Nullam wisi vel ipsum pede, at blandit egestas sit amet leo. Curabitur scelerisque tellus nec nulla. Suspendisse ut nulla.
Polecenie tail
Wyświetlenie podanej liczby linii z końca pliku.
tail -n 1 plik
Polecenie sed
Edytor strumieniowy, służy do przetwarzania tekstu, umożliwia zamianę wzorca na nową wartość.
| Polecenie | Wykorzystanie |
| sed 1s/wzorzec/zamiana/ plik | zamieni pierwszy wzorzec na zamianę w pliku |
| sed s/wzorzec/zamiana/ plik | zamieni wszystkie wzorce zamianami w pliku |
| sed 1,4s/wzorzec/zamiana/ plik | zamieni pierwsze 4 napotkane wzorce zamianami w pliku |
| sed -i s/wzorzec/zamiana/ plik | zapisze zamianę w tym samym pliku |
student@student:~/Pulpit$ cat plik1
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
student@student:~/Pulpit$ sed 1s/tak/nie/ plik1
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
student@student:~/Pulpit$ sed 1,3s/tak/nie/ plik1
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
student@student:~/Pulpit$ cat plik1
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
student@student:~/Pulpit$ sed s/tak/nie/ plik1
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
student@student:~/Pulpit$ cat plik1
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
Kiedy mówisz tak, myślisz nie.
student@student:~/Pulpit$ sed -i s/tak/nie/ plik1
student@student:~/Pulpit$ cat plik1
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Kiedy mówisz nie, myślisz nie.
Znaki specjalne, które możemy wykorzystać podczas tworzenia wzorca:
| Znak | Znaczenie | Przykład użycia |
|---|---|---|
| ^ | Początek wiersza | /^slowo/ – Wiersz zaczynający sie od ‘slowo’ |
| $ | Koniec wiersza | /^$/ – Wiersz pusty |
| . | Pojedynczy znak | /./ – Wiersz zawierający co najmniej jeden znak |
| * | Zero lub więcej wystąpień poprzedniego znaku | / */ – Wiersz zawierający jedną lub więcej sąsiadujących spacji |
| [ ] | Wszystkie znaki pomiędzy ‘[‘ i ‘]’ | /[abc]/ – Wiersz zawierający ‘a’, ‘b’ lub ‘c’ |
Ponadto możemy skorzystać z klas znakowych:
| Klasa znakowa | Znaczenie |
|---|---|
| [:alnum:] | Znaki alfanumeryczne [a-z A-Z 0-9] |
| [:alpha:] | Znaki alfabetyczne [a-z A-Z] |
| [:blank:] | Spacje lub tabulatory |
| [:cntrl:] | Dowolny znak kontrolny |
| [:digit:] | Cyfry [0-9] |
| [:graph:] | Znaki drukowalne (bez odstępów) |
| [:lower:] | Małe litery [a-z] |
| [:print:] | Znaki drukowalne z odstępami |
| [:punct:] | Znaki drukowalne z wyjątkiem odstępów, liter i cyfr |
| [:space:] | Wszystkie znaki odstępu |
| [:upper:] | Duże litery [A-Z] |
| [:xdigit:] | Cyfry w systemie szesnastkowym [0-9 a-f A-F] |
Polecenie awk
Wyszukiwanie i przetwarzanie wzorców w plikach i strumieniach danych.
Podstawowe wykorzystanie awk:
| Polecenie | Wykorzystanie |
| awk ‘{ print $0 }’ /etc/passwd | Wypisanie całej zawartości pliku passwd |
| awk -F: ‘{ print $1 }’ /etc/passwd | Wypisanie pierwszego pola każdej linii oddzielonego za pomocą spacji (1 kolumna) |
| awk -F: ‘{ print $1 $5 }’ /etc/passwd | Wypisanie pierwszych pięciu pól każdej linii |
Polecenie sort
Sortowanie wierszy plików tekstowych. Dokładniej omówione w osobnym temacie.
sort nazwa_pliku – sortowanie linii pliku
sort -u nazwa_pliku – sortowanie linii pliku bez potworzeń
student@student:~$ cat plik1
kot
pies
jaszczurka
żaba
kot
kot
dinozaur
lemur
surykatka
świnia
krowa
pies
student@student:~$ sort plik1
dinozaur
jaszczurka
kot
kot
kot
krowa
lemur
pies
pies
surykatka
świnia
żaba
student@student:~$ sort -u plik1
dinozaur
jaszczurka
kot
krowa
lemur
pies
surykatka
świnia
żaba
Polecenie uniq
Wypisanie zawartości pliku bez zdublowanych następujących po sobie linii
uniq -c nazwa_pliku – dodatkowo ilość następujących po sobie zdublowań linii
student@student:~$ cat plik1
kot
pies
jaszczurka
żaba
kot
kot
dinozaur
lemur
surykatka
świnia
krowa
pies
student@student:~$ uniq plik1
kot
pies
jaszczurka
żaba
kot
dinozaur
lemur
surykatka
świnia
krowa
pies
student@student:~$ uniq -c plik1
1 kot
1 pies
1 jaszczurka
1 żaba
2 kot
1 dinozaur
1 lemur
1 surykatka
1 świnia
1 krowa
1 pies
Wykorzystanie sort i uniq: ilość wystąpień poszczególnych linii pliku
student@student:~$ sort plik1 | uniq -c
1 dinozaur
1 jaszczurka
3 kot
1 krowa
1 lemur
2 pies
1 surykatka
1 świnia
1 żaba
Polecenie paste
Łączenie odpowiadających sobie pól z wielu plików
student@student:~$ cat plik2
kot
pies
żubr
mamut
student@student:~$ cat plik3
zielony
żółty
czerwony
biały
student@student:~$ paste plik2 plik3
kot zielony
pies żółty
żubr czerwony
mamut biały
student@student:~$ paste -d '-' plik2 plik3
kot-zielony
pies-żółty
żubr-czerwony
mamut-biały
Polecenie join
Łączenie danych z wielu plików według wspólnych pól
student@student:~$ cat plik4
1 Jan
2 Paweł
3 Konrad
4 Bogdan
student@student:~$ cat plik5
1 Kowalski
2 Nowak
3 Wiśniewski
4 Duda
student@student:~$ join plik4 plik5
1 Jan Kowalski
2 Paweł Nowak
3 Konrad Wiśniewski
4 Bogdan Duda