Команда cut в Linux

Команда cut вырезает участки каждой строки файла и выводит результаты в стандартный поток вывода. Она может вырезать часть строки по расположению байта, символу и полю. В сущности она разрезает строку на участки и извлекает из них текст. С этой командой обязательно нужно указывать опции, иначе она выдаст ошибку. Если указать несколько файлов, то при выводе данных имена файлов перед ними не выводятся. Команда работает как с файлами так и с выводом из другой команды.

Синтаксис

cut ОПЦИЯ... [ФАЙЛ]...

Или

<команда> | cut ОПЦИЯ...

Допустим, у нас есть файл state.txt, содержащий названия 5 государств:

$ cat state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания

Если опций не указывать, то команда выдаст ошибку:

$ cut state.txt
cut: you must specify a list of bytes, characters, or fields
Try 'cut --help' for more information.

Опции и их описания с примерами

1. -b (byte, байт): используется для извлечения заданных байтов, номера которых указываются после опции через запятую. Можно указать диапазоны через дефис. Если не указать ничего, команда выдаст ошибку. Символы табуляции и пробелы рассматриваются как символы размером в один байт.

$ cut -b 1,2,3 state.txt
Рос
Гер
Нид
Сое
Исп
$ cut -b 1-3,5-7 state.txt
Росия
Герани
Нидрла
Соеине
Испния
echo Россия | cut -b 1,2,3
Рос

Для выбора байтов от заданной позиции до конца строки используется следующая форма:

$ cut -b 1- state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания

Аналогичным образом можно указать байты от начала строки до заданной позиции:

$ cut -b -3 state.txt
Рос
Гер
Нид
Сое
Исп

2. -c (column, столбец): используется для вырезания по символам. Это также может быть список символов, указанных через запятую, или диапазон, заданный через дефис. Символы табуляции и пробела интерпретируются как один символ. Номера символов указывать обязательно, иначе команда выдаст ошибку.

$cut -c [(k)-(n)/(k),(n)/(n)] filename

где k – начальный символ, а n – конечный, если они разделены дефисом, либо просто позиции символов, указанные через запятую.
Следующая команда вырезает второй, пятый и седьмой символы строк:

$ cut -c 2,5,7 state.txt
ои
еаи
ира
оие
сня

А эта команда – выводит первые семь символов каждой строки файла:

$ cut -c 1-7 state.txt
Россия
Германи
Нидерла
Соедине
Испания

Интервалы от заданной позиции до конца строки и от начала строки до заданной позиции задаются аналогично предыдущей опции:

$ cut -c 1- state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания
$ cut -c -5 state.txt
Росси
Герма
Нидер
Соеди
Испан

3. -f (field, поле): опция -с полезна для строк фиксированной длины, однако в большинстве файлов они не встречаются. Вам потребуется вырезать данные по полям, а не по столбцам, чтобы получить нужную информацию. Для этого используется опция -f. Номера полей должны разделяться запятыми. Данная опция не позволяет указывать диапазоны. По умолчанию в качестве разделителя полей используется символ табуляции, но при помощи опции -d можно задать другой разделитель.
Важно: по умолчанию пробел не является разделителем.

$cut -d "разделитель" -f (номер поля) файл

В файле state.txt поля разделены пробелами, и если не использовать опцию -d, строки будут выводиться целиком:

$ cut -f 1 state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания

При помощи опции -d можно задать в качестве разделителя пробел:

$ cut -d " " -f 1 state.txt
Россия
Германия
Нидерланды
Соединенное
Испания

Было выведено каждое слово до пробела.

4. –complement: используется с другими опциями, например, -f или -c, и инвертирует опции вывода:

$ cut --complement -d " " -f 1 state.txt
Россия
Германия
Нидерланды
Королевство
Испания
$ cut --complement -c 5 state.txt
Росся
Гермния
Ниделанды
Соедненное Королевство
Испаия

5. –output-delimiter: По умолчанию разделитель выводимых данных такой же, как указанный в опции -d. Чтобы его изменить, воспользуйтесь опцией –output-delimiter. Следующая команда задает в качестве разделителя вывода символ «%» и выводит 1 и 2 поля с опцией -f:

$ cut -d " " -f 1,2 state.txt --output-delimiter='%'
Россия
Германия
Нидерланды
Соединенное%Королевство
Испания

6. –version: Выводит информацию о версии команды:

$ cut --version
cut (GNU coreutils) 8.26
Packaged by Cygwin (8.26-2)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David M. Ihnat, David MacKenzie, and Jim Meyering.

7. –help: Выводит справочную информацию.

Еще несколько полезных примеров

Команда Описание
free | grep Mem | sed ‘s/\s\+/,/g’ | cut -d , -f2 Показывает объем памяти текущей системы
cat /proc/cpuinfo | grep «name» | cut -d : -f2 | uniq Возвращает тип CPU
wget -q -O X http://ipchicken.com/ grep ‘^ \{8\}[0-9]’ X | sed ‘s/\s\+/,/g’ | cut -d , -f2 Возвращает мой внешний IP-адрес
cut -d : -f 1 /etc/passwd Извлекает список пользователей текущей системы

ifconfig eth0 | grep HWaddr | cut -d » » -f 11

Получает MAC-адрес моих сетевых интерфейсов
who | cut -d \s -f1 Вывод список пользователей, авторизованных в текущей системе
grep -w <n> /etc/services | cut -f 1 | uniq Показывает, какая служба использует порт <n>.

Заключение

Команда cut очень простая, но широко используется для работы с текстовыми данными, часто в сочетании с другими командами, такими как cat или sort. Мы разобрали практически все ее опции. Однако, в разных системах версии команды и ее опции могут немного отличаться, для уточнения обратитесь к соответствующим man-страницам.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Comments: 1
  1. Дмитрий

    Подскажите. Есть небольшой файл, в котором перечислены файлы домашней директории (где первый столбец это имя файла, разделитель «:»), как с помощью cut выделить первый столбец и отделить от дальнейшей строки если в ней содержится цифра «3».

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: