В системах Linux и Unix доступно множество утилит, позволяющих обрабатывать и фильтровать текстовые файлы. cut
— это утилита командной строки, которая позволяет вырезать части строк из указанных файлов или данных, передаваемых по конвейеру, и выводить результат на стандартный вывод. Его можно использовать для вырезания частей строки по разделителю, позиции байта и символу.
В этой статье мы покажем вам, как использовать команду cut
на практических примерах и подробных объяснениях наиболее распространенных параметров.
Как использовать команду cut
Синтаксис команды cut
следующий:
cut OPTION... [FILE]...
Параметры, которые указывают cut
следует ли использовать разделитель, позицию байта или символ при вырезании выбранных частей строк, следующие:
-f
(--fields=LIST
) — Выбрать, указав поле, набор полей или диапазон полей. Это наиболее часто используемый вариант.-b
(--bytes=LIST
) — Выбрать, указав байт, набор байтов или диапазон байтов.-c
(--characters=LIST
) — Выбрать, указав символ, набор символов или диапазон символов.
Вы можете использовать один и только один из перечисленных выше вариантов.
Другие варианты:
-d
(--delimiter
) — укажите разделитель, который будет использоваться вместо разделителя по умолчанию «TAB».--complement
— Дополнить выбор. При использовании этой опцииcut
отображает все байты, символы или поля, кроме выбранных.-s
(--only-delimited
) — по умолчаниюcut
печатает строки, не содержащие символа разделителя. Когда используется эта опция,cut
не печатает строки, не содержащие разделителей.--output-delimiter
— По умолчаниюcut
использует разделитель ввода в качестве ограничителя вывода. Этот параметр позволяет указать другую строку разделителя вывода.
Команда cut
может принимать ноль или более входных имен ФАЙЛОВ. Если FILE
не указан или если FILE
— -
, cut
будет читать из стандартного ввода.
Аргумент LIST
переданный параметрам -f
, -b
и -c
, может быть целым числом, несколькими целыми числами, разделенными запятыми, диапазоном целых чисел или несколькими диапазонами целых чисел, разделенными запятыми. Каждый диапазон может быть одним из следующих:
N
-ое поле, байт или символ, начиная с 1.N-
от N-го поля, байта или символа, до конца строки.NM
от N-го до M-го поля, байта или символа.-M
от первого до M-го поля, байта или символа.
Как обрезать по полю
Чтобы указать поля, которые следует вырезать, вызовите команду с параметром -f
. Если не указано иное, разделителем по умолчанию является «ТАБЛИЦА».
В приведенных ниже примерах мы будем использовать следующий файл. Поля разделены табуляцией.
245:789 4567 M:4540 Admin 01:10:1980
535:763 4987 M:3476 Sales 11:04:1978
Например, чтобы отобразить 1-е и 3-е поля, вы должны использовать:
cut test.txt -f 1,3
245:789 M:4540
535:763 M:3476
Или, если вы хотите отображать с 1-го по 4-е поля:
cut test.txt -f -4
245:789 4567 M:4540 Admin
535:763 4987 M:3476 Sales
Как вырезать по разделителю
Чтобы вырезать по разделителю, вызовите команду с параметром -d
, за которым следует разделитель, который вы хотите использовать.
Например, чтобы отобразить 1-е и 3-е поля с использованием «:» в качестве разделителя, вы должны ввести:
cut test.txt -d ':' -f 1,3
245:4540 Admin 01
535:3476 Sales 11
В качестве разделителя можно использовать любой одиночный символ. В следующем примере мы используем пробел в качестве разделителя и печатаем 2-е поле:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum
Чем дополнить подборку
Чтобы дополнить список полей выбора, используйте параметр --complement
. Это напечатает только те поля, которые не выбраны с помощью опции -f
.
Следующая команда распечатает все поля, кроме 1-го и 3-го:
cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980
4987 Sales 11:04:1978
Как указать разделитель вывода
Чтобы указать разделитель вывода, используйте параметр --output-delimiter
. Например, чтобы установить разделитель вывода на _
вы должны использовать:
cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540
535:763_M:3476
Как обрезать по байтам и символам
Прежде чем идти дальше, давайте проведем различие между байтами и символами.
Один байт составляет 8 бит и может представлять 256 различных значений. Когда был установлен стандарт ASCII, он учитывал все буквы, цифры и символы, необходимые для работы с английским языком. Таблица символов ASCII состоит из 128 символов, и каждый символ представлен одним байтом. Когда компьютеры стали доступны во всем мире, технологические компании начали вводить новые кодировки символов для разных языков. Для языков, содержащих более 256 символов, простое сопоставление 1 к 1 было невозможно. Это приводит к различным проблемам, таким как совместное использование документов или просмотр веб-сайтов, и требовался новый стандарт Unicode, который может обрабатывать большинство мировых систем письма. UTF-8 был создан для решения этих проблем. В UTF-8 не все символы представлены 1 байтом. Символы могут быть представлены от 1 до 4 байтов.
Параметр -b
( --bytes
) указывает команде вырезать разделы из каждой строки, указанной в заданных позициях байтов.
В следующих примерах мы используем символ ü
который занимает 2 байта.
Выберите 5-й байт:
echo 'drüberspringen' | cut -b 5
b
Выберите 5-й, 9-й и 13-й байты:
echo 'drüberspringen' | cut -b 5,9,13
bpg
Выберите диапазон от 1-го до 5-го байта:
echo 'drüberspringen' | cut -b 1-5
drüb
На момент написания этой статьи версия cut
входящая в состав GNU coreutils, не имела возможности вырезать по символам. При использовании параметра -c
команда cut
ведет себя так же, как и при использовании параметра -b
.
Примеры вырезок
Команда cut
обычно используется в сочетании с другими командами через трубопровод. Вот несколько примеров:
Получите список всех пользователей
Вывод команды getent passwd
передается в cut
, который печатает первое поле с использованием :
качестве разделителя.
getent passwd | cut -d ':' -f1
На выходе отображается список всех пользователей системы .
Посмотреть 10 наиболее часто используемых команд
В следующем примере cut
используется для удаления первых 8 байтов из каждой строки вывода команды history
.
history | cut -c8- | sort | uniq -c | sort -rn | head
Выводы
Команда cut
используется для отображения выбранных полей из каждой строки заданных файлов или стандартного ввода.
Хотя это очень полезно, cut
имеет некоторые ограничения. Он не поддерживает указание более одного символа в качестве разделителя и не поддерживает несколько разделителей.
Добавить комментарий