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-разработке
Я также надеюсь, что некоторые друзья смогут присоединиться ко мне и сделать эту электронную книгу более совершенной!
Есть урожай? Я надеюсь, что старые айроны придут к комбо из трех ударов и покажут больше людей, чтобы увидеть эту статью.
Рекомендуемое чтение: