Linux | Terminal - przetwarzanie tekstu · Technik informatyk egzamin zawodowy

Soisk / Linux

Linux | Terminal - 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