Поиск по сайту:
История — это роман, в который верят, роман же — история, в которую не верят (М. Сафир).

Команда Cut с примерами в Linux

08.04.2019
Команда Cut с примерами в Linux

В системах Linux и Unix доступно множество утилит, позволяющих обрабатывать и фильтровать текстовые файлы. Cut – это утилита командной строки, которая позволяет вырезать части строк из указанных файлов или переданных данных и выводить результат в стандартный вывод. Его можно использовать для вырезания частей строки по разделителю, позиции байта и символу.

В этой статье мы покажем вам, как использовать команду Cut в Linux, на практических примерах и подробных объяснениях наиболее распространенных параметров резки.

 

Синтаксис команды cut следующий:

cut OPTION... [FILE]...

При использовании команды 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».

В приведенных ниже примерах мы будем использовать следующий файл. Все поля разделены вкладками.

test.txt
245:789 4567    M:4540  Admin   01:10:1980
535:763 4987    M:3476  Sales   11:04:1978

Для отображения 1-го и 4-го полей вы должны использовать:

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

Чтобы Cut на основе разделителя, используйте параметр -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 байтов.

В следующих примерах мы используем символ ü, который занимает 2 байта.

Используйте опцию -b( –bytes), чтобы вырезать часть строки, указав позицию байта.

Выберите 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.

 

Команда обрезки обычно используется в сочетании с другими командами через трубопровод. Вот несколько примеров.

 

Выходные данные команды getent passwd передаются на cutпечать 1-го поля с использованием : в качестве разделителя.

getent passwd | cut -d ':' -f1

В следующем примере cut используется для удаления первых 8 байтов из каждой строки вывода команды history.

history | cut -c8- | sort | uniq -c | sort -rn | head

К настоящему времени вы должны хорошо понимать, как использовать команду cut в Linux. Хотя команда cut очень полезна, она имеет некоторые ограничения. Он не поддерживает указание более одного символа в качестве разделителя и не поддерживает несколько дециметров.

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

Спасибо!

Теперь редакторы в курсе.