
Linux: Wiersz poleceń – przetwarzanie tekstu
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