Polecenie cut w systemie Linux

Zaktualizowano: 05.04.2019 przez Computer Hope

W systemie Unix -podobnie jak systemy operacyjne, polecenie cut usuwa („wycina”) sekcje każdej linii pliku lub plików.

Ten dokument dotyczy wersji cut dla GNU / Linuksa.

Składnia

cut OPTION... ...

Opcje

-b, –bytes = LISTA Wybierz tylko bajty z każdego wiersza, jak określono w LISTA. LISTA określa bajt, zestaw bajtów lub zakres bajtów; zobacz Określanie LISTY poniżej.
-c, –characters = LISTA Wybierz tylko znaki z każdej linii, jak określono w LISTA. LISTA określa znak, zestaw znaków lub zakres znaków; zobacz Określanie LISTY poniżej.
-d, –delimiter = DELIM użyj znaku DELIM zamiast tabulatora jako separatora pola.
-f, –fields = LISTA wybierz tylko te pola w każdej linii; wypisuje również każdą linię, która nie zawiera separatora, chyba że podano opcję -s. LISTA określa pole, zestaw pól lub zakres pól; zobacz Określanie LISTY poniżej.
-n Ta opcja jest ignorowana, ale została uwzględniona ze względu na kompatybilność.
–complement uzupełnia zestaw wybranych bajtów, znaków lub pól.
-s, –only-delimited nie drukuj wierszy niezawierających separatorów.
–output-delimiter = ŁAŃCUCH użyj ŁAŃCUCHA jako łańcucha separatora wyjścia. Domyślnie używany jest separator danych wejściowych.
–help Wyświetl komunikat pomocy i zakończ.
–version wyświetla informacje o wersji i kończy działanie.

Uwagi dotyczące użytkowania

Wywołując cut, użyj opcji -b, -c lub -f, ale tylko jednej z nich.

Jeśli nie podano PLIKU, cut czyta ze standardowego wejścia.

Określanie LISTY

Każda LISTA składa się z liczby całkowitej, zakresu liczb całkowitych lub wielu zakresów liczb całkowitych oddzielonych przecinkami. Wybrane wejście jest zapisywane w tej samej kolejności, w jakiej jest odczytywane, i zapisywane na wyjściu dokładnie raz. Zakres składa się z:

Na przykład, powiedzmy, że masz plik o nazwie data.txt, który zawiera następujący tekst:

onetwothreefourfivealphabetagammadeltaepsilon

W tym przykładzie każde z tych słów jest oddzielone znakiem tabulacji, a nie spacjami. Znak tabulacji jest domyślnym ogranicznikiem wycięcia, więc domyślnie będzie traktować pole jako wszystko rozdzielone tabulatorem.

Aby „wyciąć” tylko trzecie pole każdego wiersza, użyj polecenia:

cut -f 3 data.txt

… co da wynik:

threegamma

Jeśli zamiast tego chcesz „wyciąć” tylko pola od drugiej do czwartej każdego wiersza, użyj polecenia:

cut -f 2-4 data.txt

… co zwróci następujący wynik:

twothreefourbetagammadelta

Jeśli chcesz” wyciąć „tylko pierwszy-do- drugie i od czwartego do piątego pola każdego wiersza (pomijając trzecie pole), użyj polecenia:

cut -f 1-2,4-5 data.txt

… które wyświetli:

onetwofourfivealphabetadeltaepsilon

Albo powiedzmy chcesz trzecie pole i każde pole po nim, pomijając pierwsze dwa pola. W tym przypadku możesz użyć polecenia:

cut -f 3- data.txt

…, które wyświetli:

threefourfivegammadeltaepsilon

Określenie zakresu za pomocą LISTA dotyczy również wycinania znaków (-c) lub bajtów (-b) z wiersza. Na przykład, aby wypisać tylko znak od trzeciej do dwunastej w każdym wierszu danych.txt, użyj polecenia:

cut -c 3-12 data.txt

… które wyświetli następujące:

etwothrephabetag

Pamiętaj, że „spacja” między każdym słowem to w rzeczywistości pojedynczy znak tabulacji, więc w obu wierszach wyniku jest wyświetlanych dziesięć znaków: osiem znaki alfanumeryczne i dwa znaki tabulacji. Innymi słowy, cut pomija pierwsze dwa znaki w każdym wierszu, licząc tabulatory jako jeden znak; wypisywanie znaków od trzech do dwunastu, licząc tabulatory jako jeden znak; i pomijanie jakichkolwiek znaków po dwunastej.

Liczenie bajtów zamiast znaków da w tym przypadku taki sam wynik, ponieważ w pliku tekstowym zakodowanym w ASCII każdy znak jest reprezentowany przez jeden bajt (osiem bitów ) danych. Zatem polecenie:

cut -b 3-12 data.txt

… da dla naszego pliku data.txt dokładnie to samo wyjście:

etwothrephabetag

Określanie separatora innego niż tabulator

Znak tabulatora jest domyślnym separatorem używanym przez cut do określenia, co stanowi pole. Tak więc, jeśli pola twojego pliku są już rozdzielone tabulatorami, nie musisz określać innego znaku separatora.

Możesz jednak określić dowolny znak jako separator.Na przykład plik / etc / passwd zawiera informacje o każdym użytkowniku w systemie, o jednym użytkowniku w każdym wierszu, a każde pole informacyjne jest oddzielone dwukropkiem („:”). Na przykład wiersz / etc / passwd dla użytkownika root może wyglądać następująco:

root:x:0:0:root:/root:/bin/bash

Te pola zawierają następujące informacje w następującej kolejności: oddzielone dwukropkiem:

  1. Nazwa użytkownika
  2. Hasło (wyświetlane jako x, jeśli jest zaszyfrowane)
  3. Numer ID użytkownika (UID)
  4. Numer ID grupy (GID)
  5. Pole komentarza (używane przez polecenie finger)
  6. Katalog domowy
  7. Shell

Nazwa użytkownika to pierwsze pole w wierszu, więc aby wyświetlić każdą nazwę użytkownika w systemie, użyj polecenia:

cut -f 1 -d ":" /etc/passwd

… które wyświetli , na przykład:

rootdaemonbinsyschope

(W typowym systemie jest dużo więcej kont użytkowników, w tym wiele kont specyficznych dla usług systemowych, ale w tym przykładzie będziemy udawać jest tylko pięciu użytkowników.)

Trzecie pole każdej linii w pliku / etc / passwd to UID (numer ID użytkownika), więc aby wyświetlić każdą nazwę użytkownika i numer ID użytkownika, użyj polecenia:

… co wyświetli na przykład:

root:0daemon:1bin:2sys:3chope:1000

Jak widać, wynik będzie rozdzielany, domyślnie, przy użyciu tego samego separatora określonego dla danych wejściowych. W tym przypadku jest to znak dwukropka („:”). Możesz jednak określić inny separator dla danych wejściowych i wyjściowych. Tak więc, jeśli chcesz uruchomić poprzednie polecenie, ale wynik jest oddzielony spacją, możesz użyć polecenia:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

Ale co, jeśli chcesz, aby wyjście było oddzielone tabulatorem ? Określenie znaku tabulatora w linii poleceń jest nieco bardziej skomplikowane, ponieważ jest to znak niedrukowalny. Aby określić go w wierszu poleceń, musisz go „zabezpieczyć” przed powłoką. Robi się to inaczej w zależności od tego, którą powłokę używasz. ponownie, ale w domyślnej powłoce Linuksa (bash) możesz określić znak tabulacji za pomocą $ „\ t”. Zatem polecenie:

cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

… wyświetli następujący wynik, na przykład:

root0daemon1bin2sys3chope1000

Przykłady

cut -c 3 file.txt

Wyświetla trzeci znak każdej linii pliku file.txt, pomijając pozostałe.

cut -c 1-3 file.txt

Wypisz pierwsze trzy znaki każdej linii pliku file.txt, pomijając resztę.

cut -c -3 file.txt

To samo co powyższe polecenie. Wypisz pierwsze trzy znaki każdego wiersza pliku file.txt.

cut -c 3- file.txt

Wypisz od trzeciego do ostatnich znaków każdego wiersza pliku file.txt, pomijając pierwsze dwa znaki.

cut -d ":" -f 1 /etc/passwd

Wyświetla pierwsze pole pliku / etc / passwd, gdzie pola są rozdzielane dwukropkami („:”). Pierwsze pole / etc / passwd to nazwa użytkownika, więc to polecenie wyświetli każdą nazwę użytkownika w pliku passwd.

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

Wypisz pierwsze i szóste pola, oddzielony dwukropkiem dowolnego wpisu w pliku / etc / passwd, który określa / bin / bash jako powłokę logowania. To polecenie wyświetli nazwę użytkownika i katalog domowy każdego użytkownika, którego powłoką logowania jest / bin / bash.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *