В Linux команда cut
предназначена для вырезания части текста из файла и записи результата в стандартный вывод.
Команда вырезает части строки, обозначенные с помощью байтов, символов или полей.
Содержание
Синтаксис
cut [опция] [файл]
Опции
- -b, --bytes=СПИСОК
- Выбрать только заданные байты
- -c, --characters=СПИСОК
- Выбрать только заданные символы
- -d, --delimiter=РАЗДЕЛИТЕЛЬ
- Использовать для разделения полей РАЗДЕЛИТЕЛЬ вместо табуляции
- -f, --fields=СПИСОК
- Выбрать только заданные поля; также печатать все строки, не содержащие разделителей, если только не задан параметр
-s
- --complement
- Дополнить множество выбранных байтов, символов или полей
- -s, --only-delimited
- Не выводить строки, не содержащие разделителей
- --output-delimiter=СТРОКА
- Использовать СТРОКУ для разделения полей при выводе, по умолчанию используется разделитель для ввода
- -z, --zero-terminated
- Разделитель строк NUL, а не символ новой строки
Примеры использования команды cut в Linux
Использовать файл необязательно. Если на месте его названия поставить прочерк, либо не указать ничего, команда возьмет текст из стандартного ввода. При необходимости можно указывать больше файлов, чем один Необходимо указать опцию с командой, иначе получите ошибку.
Без опции
При попытке использования команды cut
без опции вы получите ошибку:
oleg@mobile:~/Directory:$ cut usa-states.txt
cut: вы должны задать список байт, символов или полей
По команде «cut --help» можно получить дополнительную информацию.
oleg@mobile:~/Directory:$
Извлечение по байтам
Для извлечения определённых байтов, используется опция -b
со списком номеров байтов, разделенных запятой. Табуляции и символы возврата рассматриваются как символ размером 1 байт.
Список без диапазонов:
oleg@mobile:~/Directory:$ cut -b 1,2,3 usa-states.txt
Ala
Ala
Ari
Ark
Cal
Col
Con
...
Uta
Ver
Vir
Was
Wes
Wis
Wyo
oleg@mobile:~/Directory:$
Список с диапазонами:
oleg@mobile:~/Directory:$ cut -b 1-3,5-7 usa-states.txt
Alaama
Alaka
Ariona
Arknsa
Calfor
Colrad
Conect
Delwar
...
Veront
Virini
Wasing
Wes Vi
Wisons
Wyoing
oleg@mobile:~/Directory:$
Выбор байтов от начала до конца строки. Здесь 1-
указывает, что вывод будет производиться от первого байта до конечного байта строки:
oleg@mobile:~/Directory:$ cut -b 1- usa-states.txt
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
..
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
oleg@mobile:~/Directory:$
Можно указать вывод от начала строки до конкретного байта, в данном случае до 5-го:
oleg@mobile:~/Directory:$ cut -b -5 usa-states.txt
Alaba
Alask
Arizo
Arkan
Calif
Color
Conne
...
Penns
South
South
Tenne
Texas
Utah
Vermo
Virgi
Washi
West
Wisco
Wyomi
oleg@mobile:~/Directory:$
Извлечение по символам
В этом случае используется опция -c
:
oleg@mobile:~/Directory:$ cut -c 1-3 usa-states.txt
Ala
Ala
Ari
Ark
Cal
Col
Con
Del
...
Ten
Tex
Uta
Ver
Vir
Was
Wes
Wis
Wyo
oleg@mobile:~/Directory:$
В примере был задан диапазон символов с первого по третий.
Извлечение по полям
Для вывода определённых полей из файла иногда нельзя полагаться на номер символа. Например:
oleg@mobile:~:$ cat /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
mail:x:8:12::/var/spool/mail:/usr/bin/nologin
ftp:x:14:11::/srv/ftp:/usr/bin/nologin
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:981:981:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:980:980:systemd Network Management:/:/usr/bin/nologin
systemd-oom:x:979:979:systemd Userspace OOM Killer:/:/usr/bin/nologin
systemd-resolve:x:978:978:systemd Resolver:/:/usr/bin/nologin
systemd-timesync:x:977:977:systemd Time Synchronization:/:/usr/bin/nologin
systemd-coredump:x:976:976:systemd Core Dumper:/:/usr/bin/nologin
uuidd:x:68:68::/:/usr/bin/nologin
oleg:x:1000:984::/home/oleg:/bin/bash
polkitd:x:102:102:PolicyKit daemon:/:/usr/bin/nologin
rtkit:x:133:133:RealtimeKit:/proc:/usr/bin/nologin
avahi:x:975:975:Avahi mDNS/DNS-SD daemon:/:/usr/bin/nologin
mysql:x:974:974:MariaDB:/var/lib/mysql:/usr/bin/nologin
dhcp:x:973:973:DHCP daemon:/:/usr/bin/nologin
lightdm:x:972:972:Light Display Manager:/var/lib/lightdm:/usr/bin/nologin
git:x:971:971:git daemon user:/:/usr/bin/git-shell
saned:x:970:970:SANE daemon user:/:/usr/bin/nologin
geoclue:x:969:969:Geoinformation service:/var/lib/geoclue:/usr/bin/nologin
tss:x:968:968:tss user for tpm2:/:/usr/bin/nologin
tor:x:43:43::/var/lib/tor:/usr/bin/nologin
oleg@mobile:~:$
Данные в этом файле не выровнены, но поля разделяются двоеточием. Следовательно, для извлечения необходимых полей нужно лишь подсчитать количество двоеточий. Пример:
oleg@mobile:~:$ cut -d: -f 1,7 /etc/passwd
root:/bin/bash
bin:/usr/bin/nologin
daemon:/usr/bin/nologin
mail:/usr/bin/nologin
ftp:/usr/bin/nologin
http:/usr/bin/nologin
nobody:/usr/bin/nologin
dbus:/usr/bin/nologin
systemd-journal-remote:/usr/bin/nologin
systemd-network:/usr/bin/nologin
systemd-oom:/usr/bin/nologin
systemd-resolve:/usr/bin/nologin
systemd-timesync:/usr/bin/nologin
systemd-coredump:/usr/bin/nologin
uuidd:/usr/bin/nologin
oleg:/bin/bash
polkitd:/usr/bin/nologin
rtkit:/usr/bin/nologin
avahi:/usr/bin/nologin
mysql:/usr/bin/nologin
dhcp:/usr/bin/nologin
lightdm:/usr/bin/nologin
git:/usr/bin/git-shell
saned:/usr/bin/nologin
geoclue:/usr/bin/nologin
tss:/usr/bin/nologin
tor:/usr/bin/nologin
oleg@mobile:~:$
Вывод возвращает каждого пользователя в системе и их домашний каталог, соответствующие полям 1
и 7
соответственно.
Заключение
Здесь были приведены основные приёмы использования в Linux команды cut
для обработки файла или другой команды. Лишь тестируя различные параметры можно научиться максимально эффективно использовать командную строку для управления данными и выводами команд.