- Команда cut в Linux
- Синтаксис
- Опции и их описания с примерами
- Еще несколько полезных примеров
- Заключение
- Похожие записи:
- Команда Cut с примерами в Linux
- Как использовать команду «Cut»
- Как вырезать по полю
- Как резать на основе разделителя
- Как дополнить выбор
- Как указать выходной разделитель
- Как резать по байтам и символам
- Примеры команды Cut
- Получить список всех пользователей
- Посмотреть 10 наиболее часто используемых команд
- Заключение
Команда cut в Linux
Команда 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, столбец): используется для вырезания по символам. Это также может быть список символов, указанных через запятую, или диапазон, заданный через дефис. Символы табуляции и пробела интерпретируются как один символ. Номера символов указывать обязательно, иначе команда выдаст ошибку.
где 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: Выводит справочную информацию.
Еще несколько полезных примеров
ifconfig eth0 | grep HWaddr | cut -d » » -f 11
Заключение
Команда cut очень простая, но широко используется для работы с текстовыми данными, часто в сочетании с другими командами, такими как cat или sort. Мы разобрали практически все ее опции. Однако, в разных системах версии команды и ее опции могут немного отличаться, для уточнения обратитесь к соответствующим man-страницам.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
Команда Cut с примерами в Linux
Добавить в избранное
В системах Linux и Unix доступно множество утилит, позволяющих обрабатывать и фильтровать текстовые файлы. Cut — это утилита командной строки, которая позволяет вырезать части строк из указанных файлов или переданных данных и выводить результат в стандартный вывод. Его можно использовать для вырезания частей строки по разделителю, позиции байта и символу.
В этой статье мы покажем вам, как использовать команду Cut в Linux, на практических примерах и подробных объяснениях наиболее распространенных параметров резки.
Как использовать команду «Cut»
Синтаксис команды cut следующий:
При использовании команды Cut вы должны использовать один и только один из следующих параметров:
- -f( —fields=LIST) — Выберите, указав поле, набор полей или диапазон полей. Это наиболее часто используемый вариант.
- -b( —bytes=LIST) — Выберите, указав байт, набор байтов или диапазон байтов.
- -c( —characters=LIST) — Выберите, указав символ, набор символов или диапазон символов.
- -d( —delimiter) — Укажите разделитель, который будет использоваться вместо разделителя «TAB» по умолчанию.
- —complement- дополнить выбор. При использовании этого параметра вырезаться будут отображаться все байты, символы или поля, кроме выбранного.
- -s( —only-delimited) — По умолчанию cut будет печатать любую строку, не содержащую символа разделителя. При использовании этой опции Cut не будут печатать строки, не содержащие разделителей.
- —output-delimiter- По умолчанию используется входной разделитель в качестве выходного разделителя. Эта опция позволяет вам указать другую строку выходного разделителя.
Команда cut может принимать ноль или более входных имен FILE. Если FILE не указан или если FILE установлен -, cut будет считывать стандартный ввод.
Аргумент LIST, передаваемый параметрам -f, -b и -c может быть целым числом, несколькими целыми числами, разделенными запятыми, диапазоном целых чисел или несколькими целочисленными диапазонами, разделенными запятыми. Каждый диапазон может быть одним из следующих:
- N N-е поле, байт или символ, начиная с 1.
- N- от N-го поля, байта или символа до конца строки.
- N-M от N-го до M-го поля, байта или символа.
- -M от первого до M-го поля, байта или символа.
Как вырезать по полю
Команда Cut в основном используется для отображения выбранных полей из каждой строки файлов или стандартного ввода. Если не указан, по умолчанию используется разделитель «TAB».
В приведенных ниже примерах мы будем использовать следующий файл. Все поля разделены вкладками.
245:789 4567 M:4540 Admin 01:10:1980 535:763 4987 M:3476 Sales 11:04:1978
Для отображения 1-го и 4-го полей вы должны использовать:
245:789 M:4540 535:763 M:3476
Или, если вы хотите отобразить с 1-го по 4-е поле:
245:789 4567 M:4540 Admin 535:763 4987 M:3476 Sales
Как резать на основе разделителя
Чтобы Cut на основе разделителя, используйте параметр -d, за которым следует разделитель, который вы хотите использовать.
Например, чтобы отобразить 1-е и 3-е поля, используя «:» в качестве разделителя, введите:
245:4540 Admin 01 535:3476 Sales 11
Вы можете использовать любой отдельный символ в качестве разделителя. В следующем примере мы используем символ пробела в качестве разделителя и печатаем 2-е поле:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
Как дополнить выбор
Для дополнения списка полей выбора используйте опцию —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 байтов.
В следующих примерах мы используем символ ü, который занимает 2 байта.
Используйте опцию -b( —bytes), чтобы вырезать часть строки, указав позицию байта.
echo 'drüberspringen' | cut -b 5
Выберите 5-й, 9-й и 13-й байты:
echo 'drüberspringen' | cut -b 5,9,13
Выберите диапазон от 1-го до 5-го байта:
echo 'drüberspringen' | cut -b 1-5
На момент написания этой статьи версия cut, включенная в GNU coreutils, не имела возможности резки по символам. При использовании опции -c Cut ведет себя так же, как при использовании опции -b.
Примеры команды Cut
Команда обрезки обычно используется в сочетании с другими командами через трубопровод. Вот несколько примеров.
Получить список всех пользователей
Выходные данные команды getent passwd передаются на cutпечать 1-го поля с использованием : в качестве разделителя.
Посмотреть 10 наиболее часто используемых команд
В следующем примере cut используется для удаления первых 8 байтов из каждой строки вывода команды history.
history | cut -c8- | sort | uniq -c | sort -rn | head
Заключение
К настоящему времени вы должны хорошо понимать, как использовать команду cut в Linux. Хотя команда cut очень полезна, она имеет некоторые ограничения. Он не поддерживает указание более одного символа в качестве разделителя и не поддерживает несколько дециметров.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.