środa,
Polecenie cut
Dostępna w Linuksie komenda cut służy do wybierania określonego zakresu łańcucha znaków z każdej linii wejścia.
Jedną z opcji komendy cut jest wycinanie z wierszy wejściowych określonych pozycją znaków. W przykładzie wyświetlono jedynie pierwsze znaki z wierszy pliku /etc/passwd. Aby nie zajmować zbyt wiele miejsca, poniżej znajdują się tylko trzy wyświetlone wiersze, pozostałe zastąpiono umownym wielokropkiem.
$ cut -c 1 /etc/passwd
r
d
b
...
W kolejnych kilku przykładach liczbę wyników polecenia ograniczono do trzech użyciem w potoku komendy head. Polecenie cut może wyświetlić także kilka wybranych znaków, w wywołaniu należy oddzielić je przecinkiem. W przykładzie wyświetlony zostaje pierwszy, trzeci i piąty znak każdego wiersza.
$ cut -c 1,3,5 /etc/passwd | head -3
ro:
deo
bnx
Można także określić zakres znaków, w przykładzie wyświetlane są znaki od drugiego do czwartego włącznie.
$ cut -c 2-4 /etc/passwd | head -3
oot
aem
in:
Przełącznik b pozwala na wypisywanie określonych bajtów, jego stosowanie jest podobne jak w przypadku opisanych wcześniej znaków.
$ cut -b 1 /etc/passwd | head -3
r
d
b
Dzięki poleceniu cut można podzielić wiersze według określonego znaku (pojedynczego). Służy do tego opcja d (delimiter). W przypadku użycia opcji d konieczne jest zastosowanie także parametru f (field), który określa numer wyświetlonego pola. W przykładzie wiersze pliku /etc/passwd podzielono według dwukropka i wybrano siódme pole, w którym, zapisana jest informacja o powłoce logowania użytkownika.
$ cut -d: -f7 /etc/passwd | head -3
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
Czasami wymagane jest wypisanie kilku pól utworzonych za pomocą opcji d. Program cut daje możliwość wypisania wycinka od pierwszego do określonego bajtu, znaku lub pola, służy do tego parametr będący liczbą. Poniżej wypisano dwa pierwsze pola.
$ cut -d: -f -2 /etc/passwd | head -3
root:x
daemon:x
bin:x
Polecenie cut przydaje się w potokach. Oczywiście, aby zbudować użyteczną konstrukcję, należy zacząć od pierwszego polecenia i stopniowo dodawać kolejne elementy. W przykładach zaprezentowano jedynie efekt finalny.
W poniższym przykładzie dwukrotnie wyświetlono informację o karcie graficznej zainstalowanej w komputerze. W drugim poleceniu dzięki komendzie cut wynik ograniczono jedynie do nazwy urządzenia.
$ lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
lspci | grep VGA | cut -d: -f3
NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
Wyświetlenie nazwy modelu procesora:
$ lscpu | grep 'Model name' | cut -d: -f2
Intel(R) Xeon(TM) CPU 3.20GHz
Białe znaki na początku wyniku poprzedniego polecenia nie wyglądają zbyt dobrze, można je usunąć prostym sposobem. W powłoce bash dzięki konstrukcji $(...) można dokonywać podstawień, np. wyników poleceń. W przykładzie jako parametr instrukcji echo zastosowana zostaje komenda z poprzedniego przykładu. Instrukcja echo traktuje spacje znajdujące się przez przekazanym jej tekstem jako separator i w efekcie zostają one zignorowane.
$ echo $(lscpu | grep 'Model name' | cut -d: -f2)
Intel(R) Xeon(TM) CPU 3.20GHz
Wyniki wielu komend dają wyniki równo ułożone w kolumnach. Czasami opcja wycinania określonego zakresu znaków jest bardzo użyteczna, oczywiście najpierw należy ustalić, od którego znaku zaczyna się zakres. W przypadku ostatniej kolumny wyników można nie podać końca zakresu, w takim przypadku komenda wytnie znaki od początku zakresu do końca wiersza.
$ sudo lshw -short | grep processor | cut -c 52-
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz