Если вы любите ярлыки, вам понравится команда 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.
Спасибо, что прочитали.