Если вы любите ярлыки, вам понравится команда cut.

Команда cut — чрезвычайно мощная и легкая утилита командной строки для работы с текстом. Это позволяет пользователю удалять определенные части или разделы из каждой строки указанного файла или передаваемых данных и печатать результаты на стандартном выходе.

Примечание. Если FILE не указан, cut считывается из стандартного ввода.

Вырезать по байтам или символам

С помощью параметров -b и -c пользователь может удалять разделы по байтам или символам. Давайте посмотрим на эти варианты в действии.

Примечание. Если для команды cut не указан параметр, отображается ошибка.

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

#cut_blog.txt

NAME    EMAIL   PHONE   ADDRESS
jack    [email protected]   424234234,342432423     the:moon:and:the:stars
jane    [email protected]   908098094,083049820     the:earth:and:paying:rent
mark    [email protected]   534534543,535345344     pizzahut:because:i:love:pizza
luke    [email protected]   954958u19,342342343     my:room:asleep
john    [email protected]   032942049,432423233     at:the:office:soon

Вырезать по байтам

Следующая команда удаляет и печатает указанные байты каждой строки.

>> cut -b 1,10,15 cut_blog.txt

NLN
j_t
j_t
m_t
l_t
j_t

Вырезать по символу

Следующая команда удаляет и печатает указанные символы каждой строки.

>> cut -c 1,10,15 cut_blog.txt

NLN
j_t
j_t
m_t
l_t
j_t

Вырезать по диапазону

Вы можете удалить и напечатать диапазон символов.

Следующее удаляет и печатает символы в диапазоне от 1 до 27.

>> cut -c 1-27 cut_blog.txt

NAME EMAIL PHONE ADDRESS
jack [email protected]
jane [email protected]
mark [email protected]
luke [email protected]
john [email protected]

Следующее удаляет и печатает символы в диапазоне от 1 до 5 и от 28 до 47.

>> cut -b 1-5,28-47 cut_blog.txt

NAME
jack 424234234,342432423
jane 908098094,083049820
mark 534534543,535345344
luke 954958u19,342342343
john 032942049,432423233

Следующее удаляет и печатает байты, начиная с 48-го байта до конца.

>> cut -b48- cut_blog.txt

the:moon:and:the:stars
the:earth:and:paying:rent
pizzahut:because:i:love:pizza
my:room:asleep
at:the:office:soon

Следующее удаляет и печатает байты от начала строки до 47-го символа.

>> cut -c-47 cut_blog.txt

NAME EMAIL PHONE ADDRESS
jack [email protected] 424234234,342432423
jane [email protected] 908098094,083049820
mark [email protected] 534534543,535345344
luke [email protected] 954958u19,342342343
john [email protected] 032942049,432423233

Вырезать по полю

Параметр -f, за которым следует число, используется для указания того, какое поле следует удалить и напечатать.

Примечание. По умолчанию команда cut использует TAB в качестве разделителя для разделения разных полей каждой отдельной строки.

Содержимое нашего текстового файла cut_blog.txt использует TAB в качестве разделителя.

Синтаксис номера поля:

  • N: распечатать N-е поле (начиная с 1).
  • N-: печатать с N-го поля до конца строки.
  • N-M: Печатать от N-го до M-го поля.
  • -M: Печатать от первого до M-го поля.

Ниже демонстрируется приведенный выше синтаксис.

#print field 3
>> cut -f 3 cut_blog.txt

PHONE
424234234,342432423
908098094,083049820
534534543,535345344
954958u19,342342343
032942049,432423233

#print field 3 to the end of the line
>> cut -f 2- cut_blog.txt

EMAIL PHONE ADDRESS
[email protected] 424234234,342432423 the:moon:and:the:stars
[email protected] 908098094,083049820 the:earth:and:paying:rent
[email protected] 534534543,535345344 pizzahut:because:i:love:pizza
[email protected] 954958u19,342342343 my:room:asleep
[email protected] 032942049,432423233 at:the:office:soon

#print fields 1-3
>> cut -f 1-3 cut_blog.txt

NAME EMAIL PHONE
jack [email protected] 424234234,342432423
jane [email protected] 908098094,083049820
mark [email protected] 534534543,535345344
luke [email protected] 954958u19,342342343
john [email protected] 032942049,432423233

#print from the 1st field to the 3rd field.
>> cut -f -3 cut_blog.txt

NAME EMAIL PHONE
jack [email protected] 424234234,342432423
jane [email protected] 908098094,083049820
mark [email protected] 534534543,535345344
luke [email protected] 954958u19,342342343
john [email protected] 032942049,432423233

Вырезать по разделителям

Параметр -d может использоваться для установки разделителя.

Мы отредактируем файл cut_blog.txt, чтобы показать вариант использования параметра -d.

#editted cut_blog.txt

NAME EMAIL PHONE ADDRESS
jack, @cutcommand.com">user_1,@cutcommand.com 4242,34234,3424,32423 the:moon,:and:the:stars
jane, @cutcommand.com">user_2,@cutcommand.com 9080,98094,0830,49820 the:earth,:and:paying:rent
mark, @cutcommand.com">user_2,@cutcommand.com 5345,34543,5353,45344 pizzahut,:because:i:love:pizza
luke, @cutcommand.com">user_2,@cutcommand.com 9549,58u19,3423,42343 my:room,:asleep
john, @cutcommand.com">user_2,@cutcommand.com 0329,42049,4324,23233 at:the,:office:soon

TAB больше не является разделителем, и в наш текстовый файл добавлены запятые.

Если мы попытаемся напечатать поле 3, как мы делали ранее, будет напечатан весь текстовый файл, а не только поле 3. Это связано с тем, что текстовый файл больше не разделяется клавишей TAB.

Давайте установим разделитель пробелом и снова напечатаем поле 3.

>> cut -d ' ' -f 3 cut_blog.txt

PHONE
4242,34234,3424,32423
9080,98094,0830,49820
5345,34543,5353,45344
9549,58u19,3423,42343
0329,42049,4324,23233

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

Глядя на наш текстовый файл, как вы думаете, каким должно быть поле 3?

>> cut -d ',' -f 3 cut_blog.txt

NAME EMAIL PHONE ADDRESS
@cutcommand.com 4242
@cutcommand.com 9080
@cutcommand.com 5345
@cutcommand.com 9549
@cutcommand.com 0329

Примечание. Разделителем может быть символ

Разделители для выходов

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

>> cut -d ',' -f 1- --output-delimiter='_' cut_blog.txt

NAME EMAIL PHONE ADDRESS
jack_ [email protected] 4242_34234_3424_32423 the:moon_:and:the:stars
jane_ [email protected] 9080_98094_0830_49820 the:earth_:and:paying:rent
mark_ [email protected] 5345_34543_5353_45344 pizzahut_:because:i:love:pizza
luke_ [email protected] 9549_58u19_3423_42343 my:room_:asleep
john_ [email protected] 0329_42049_4324_23233 at:the_:office:soon

Вырезать по дополнению

Опция -complement используется для печати всех полей, кроме тех, которые находятся в объявленных полях.

>> cut --complement -d ',' -f 1-3 cut_blog.txt

NAME EMAIL PHONE ADDRESS
34234,3424,32423 the:moon,:and:the:stars
98094,0830,49820 the:earth,:and:paying:rent
34543,5353,45344 pizzahut,:because:i:love:pizza
58u19,3423,42343 my:room,:asleep
42049,4324,23233 at:the,:office:soon

Пользователи Mac OS

cut является частью основных утилит GNU; следовательно, вы можете установить его на свою Mac OS с помощью следующей команды:

brew install coreutils

Примечание. Версияcutпо умолчанию в Mac OS не является версией GNU. Поэтому он не поддерживает некоторые параметры.

Урезанная версия по умолчанию в Mac OS не является версией GNU, поэтому она не поддерживает некоторые параметры.

Затем вы можете использовать команду gcut, которая представляет версию GNU.

Спасибо, что прочитали.