Подробное объяснение команды cut в Linux.

Linux

cutЧто делает команда в Linux и Unix, так это берет какую-то часть каждой строки в файле и выводит ее на стандартный вывод. мы можем использоватьcutКоманда извлекает часть содержимого из строки строк в единицах байтов, символов, полей (разделителей) и т.д.

В этой статье мы используем несколько примеров, чтобы понятьcutИспользование команд, эти методы использования также очень часто используются в нашей повседневной работе.

Команда Cut и синтаксис

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

$ cut OPTION... [FILE]...

Давайте сначала узнаемcutНекоторые варианты,cutКоманды должны указывать параметры для выполнения.

-f: извлечь указанное поле,cutиспользование командыTabкак разделитель по умолчанию.

-d : Tabявляется разделителем по умолчанию, используйте этот параметр, чтобы указать собственный разделитель.

-b: Извлечь указанные байты или можно указать диапазон.

-c: извлекает указанный символ, либо список чисел, разделенных запятыми, либо диапазон чисел, разделенных дефисом.

–complement: Дополнить выделенную партию, то есть инвертировать выделение.

–output-delimiter: разделитель, используемый при изменении вывода.

--only-delimited: не выводить столбцы, не содержащие разделителей.

Нас называют какcontext.txtтекстовый файл и/etc/passwdфайл в качестве примера.

$ cat content.txt 
Ubuntu Linux
Microsoft Windows
OsX El Capitan
Unix
FreeBSD

Как указать разделитель

Наиболее распространенными вариантами являются-dа также-fсочетание, которое зависит от-dуказанный разделитель и-fПеречислите поля для извлечения содержимого.

Например, в этом примере печатается только первое поле каждой строки в файле /etc/passwd, а используемый разделитель:

$ cut -d':' -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
alvin
liangxu
...

В приведенном ниже примере мы печатаем первое поле файла content.txt с пробелами в качестве разделителей.

$ cut -d " " -f 1 content.txt 
Ubuntu
Microsoft
OsX
Unix
FreeBSD

В приведенном ниже примере мы извлекаем несколько полей. Здесь мы используем разделитель двоеточие (:), чтобы извлечь первое и шестое поля из строки, содержащей строку /bin/bash в файле /etc/passwd.

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
alvin:/home/alvin

Чтобы отобразить диапазон полей, вы можете указать начальное и конечное поля, разделенные дефисом (-), следующим образом:

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
alvin:x:1000:1000:/home/alvin:/bin/bash

Как завершить выбранный вывод

Чтобы заполнить поля вывода выбора (т. е. инвертировать выбор), используйте--complementопции. Эта опция выводит все поля, кроме указанных полей.

В следующем примере выводятся все поля, кроме второго, в строке, содержащей /bin/bash в файле /etc/passwd:

$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2
root:0:0:root:/root:/bin/bash

Как указать разделитель для вывода

использовать--output-delimiterМожно указать разделитель для вывода. Разделитель ввода задается-dуказать, а разделитель вывода и разделитель ввода по умолчанию совпадают.

Сначала мы используем следующий пример для проверки вывода, когда выходной сепаратор не указан;

$  cut -d: -f1,7  /etc/passwd |  sort |  uniq -u
_apt:/usr/sbin/nologin
backup:/usr/sbin/nologin
bin:/usr/sbin/nologin
daemon:/usr/sbin/nologin
dnsmasq:/usr/sbin/nologin
games:/usr/sbin/nologin
gnats:/usr/sbin/nologin
irc:/usr/sbin/nologin
landscape:/usr/sbin/nologin
list:/usr/sbin/nologin
lp:/usr/sbin/nologin
lxd:/bin/false

Теперь мы добавляем--output-delimiterвозможность указать разделитель вывода в виде пробела:

$  cut -d: -f1,7 --output-delimiter ' ' /etc/passwd |  sort |  uniq -u
_apt /usr/sbin/nologin
backup /usr/sbin/nologin
bin /usr/sbin/nologin
daemon /usr/sbin/nologin
dnsmasq /usr/sbin/nologin
games /usr/sbin/nologin
gnats /usr/sbin/nologin
irc /usr/sbin/nologin
landscape /usr/sbin/nologin
list /usr/sbin/nologin
lp /usr/sbin/nologin
lxd /bin/false

Давайте проверим другой пример, используя разделитель для печати одного поля в строке.

мы будем--output-delimiterНазначен$'\n'Накидки на стол.

Результат:

$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n'
root
/root
/bin/bash
operator
/root
/sbin/nologin

Как извлечь контент в виде символов

-cможно использовать для извлечения на основе позиции символа, обратите внимание на пробелы иTabТакже рассматриваются как персонажи.

Напечатайте первый символ каждой строки в файле context.txt следующим образом:

$ cut -c 1 content.txt
U
M
O
U
F

Ниже показаны символы с первого по седьмой каждой строки файла context.txt;

$ cut -c 1-7 content.txt
Ubuntu
Microso
OsX El
Unix
FreeBSD

Давайте проверим еще раз, указав только начальную или конечную позицию.

Следующее извлекает предпоследние символы:

$ cut -c2- content.txt
buntu Linux
icrosoft Windows
sX El Capitan
nix
reeBSD

Извлечение первого до четвертого символа:

cut -c-4 content.txt
Ubun
Micr
OsX
Unix
Free

Как извлечь на основе байтов

использовать-bВозможность выбрать часть строки, указав позицию байтов, разделив каждую указанную позицию запятой или дефисом.-Укажите диапазон.

В следующем примере извлекаются первый, второй и третий байты каждой строки в файле content.txt:

$ cut -b 1,2,3 content.txt 
Ubu
Mic
OsX
Uni
Fre

Мы также можем перечислить диапазон с помощью следующей команды;

$ cut -b 1-3,5-7 content.txt 
Ubutu 
Micoso
OsXEl 
Uni
FreBSD

несколько практических примеров

cutэто служебная команда, которая часто используется в сочетании с другими командами Linux или Unix.

Например, если вы хотите извлечь USER, PID и COMMAND из команды ps:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
USER PID COMMAND
0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux
0 23174 -bash
0 26737 ps -L u n
0 26738 tr -s
0 26739 cut -d -f 2,3,14-

Чтобы протестировать другой пример, извлеките общее, используемое и свободное значения памяти и сохраните в файл.

$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
$ cat memory.txt
985 86 234

Суммировать

cutКоманды могут быть переданы многим другим командам Linux или Unix. Один или несколько фильтров могут быть переданы для дополнительной обработки текста.

cutОдним из ограничений команды является то, что она не поддерживает указание нескольких символов в качестве разделителей. Несколько пробелов считаются разделителями нескольких полей, поэтому их необходимоcutиспользовать перед командойtrкоманду, чтобы получить желаемый результат.


Наконец, в последнее время многие друзья попросили меняДорожная карта изучения Linux, поэтому я использовал свое свободное время, чтобы не ложиться спать допоздна в течение месяца, и составил электронную книгу, основываясь на собственном опыте. Независимо от того, проводите ли вы собеседование или занимаетесь самосовершенствованием, я считаю, что это поможет вам! Каталог выглядит следующим образом:

Дайте это всем бесплатно, просто попросите всех поставить мне палец вверх!

электронная книга | План обучения Linux-разработке

Я также надеюсь, что некоторые друзья смогут присоединиться ко мне и сделать эту электронную книгу более совершенной!

Есть урожай? Я надеюсь, что старые айроны придут к комбо из трех ударов и покажут больше людей, чтобы увидеть эту статью.

Рекомендуемое чтение: