8 Примеры команд вырезания [Вырезание частей линий в файле]
Как пользователи Linux, мы регулярно взаимодействуем с текстовыми файлами. Одной из распространенных операций, которые мы выполняем с этими файлами, является фильтрация текста. Linux предоставляет множество утилит командной строки для фильтрации текста, таких как – grep, fgrep, sed, awk, и этот список можно продолжить.
Однако в этом руководстве мы обсудим еще одну утилиту для фильтрации текста под названием cut, которая используется для удаления определенного участка из строки ввода. Команда cut выполняет фильтрацию на основе позиции байта, символа, поля и разделителя.
В этом руководстве для начинающих мы узнаем о команде cut с примерами в командной строке Linux. Следуя этому руководству, пользователи командной строки Linux смогут эффективно использовать команду cut в своей повседневной жизни.
cut Синтаксис команд
Синтаксис команды cut такой же, как и у любой другой команды Linux:
$ cut <OPTIONS>... [FILE-1] [FILE-2] ...
В приведенном выше синтаксисе угловая скобка (<>)
представляет обязательные аргументы, а квадратная скобка ([])
представляет необязательные параметры.
Теперь, когда мы знакомы с синтаксисом команды cut. Далее давайте создадим пример файла для использования в качестве примера:
$ cat file.txt
1. Распечатайте первый байт файла
Команда cut позволяет нам извлекать текст на основе позиции байта с помощью опции -b
.
Давайте воспользуемся приведенной ниже командой для извлечения первого байта из каждой строки файла:
$ cut -b 1 file.txt
В этом примере мы видим, что команда cut показывает только первый символ, потому что все символы имеют длину в один байт.
2. Печать нескольких байт файла
В предыдущем примере мы видели, как выбрать один байт из файла. Тем не менее, команда cut также позволяет нам выбрать несколько байтов с помощью запятой.
Давайте с помощью приведенной ниже команды выберем первые четыре байта из файла:
$ cut -b 1,2,3,4 file.txt
В этом примере мы выбрали последовательные байты, но это не обязательно. Мы можем использовать любую допустимую позицию байта с помощью команды cut.
3. Распечатайте диапазон байт файла
В предыдущем примере мы использовали запятые для выбора последовательных байтов. Однако такой подход не подходит, если мы хотим последовательно выбрать большое количество байтов. В таких случаях мы можем использовать дефис (-)
для указания диапазона байтов.
Чтобы понять это, давайте используем диапазон байтов от 1 до 12 для выбора первых двенадцати байтов из каждой строки:
$ cut -b 1-12 file.txt
Аналогичным образом мы можем выбрать диапазон байтов от середины. Например, приведенная ниже команда выбирает байты с номерами столбцов от 17 до 30:
$ cut -b 17-30 file.txt
4. Печать Укажите начальную позицию файла в байтах
Иногда мы хотим извлечь весь текст из определенной позиции байта. В таких случаях мы можем опустить позицию конечного байта.
Например, мы можем использовать следующую команду для вывода всех байтов, начиная с позиции 17:
$ cut -b 17- file.txt
В приведенной выше команде 17 представляет начальную позицию байта, а дефис (-)
представляет конец строки.
5. Печать Укажите позицию файла в конце байта
Аналогичным образом мы также можем указать только позицию конечного байта. Например, приведенная ниже команда выводит все байты от начала строки до 12-го столбца:
$ cut -b -12 file.txt
В приведенной выше команде дефис (-)
представляет начало строки, а 12 — позицию конечного байта.
6. Вырезаем первый байт по позиции символа
В последних нескольких разделах мы рассмотрели, как выполнить извлечение текста на основе позиции байта. Теперь давайте посмотрим, как выполнить извлечение текста по позиции символа.
Чтобы добиться этого, мы можем использовать опцию -c
, чтобы вырезать первый байт из следующей многобайтовой строки:
$ echo école | cut -b 1
�
В приведенном выше выводе мы видим, что команда cut показывает вопросительный знак вместо символа é
. Это происходит потому, что мы пытаемся вывести первый байт из многобайтового символа.
Теперь давайте воспользуемся опцией -c
, чтобы вырезать тот же многобайтовый символ и посмотрим на результат:
$ echo école | cut -c 1
é
В приведенном выше выводе мы видим, что теперь команда cut показывает ожидаемый результат.
Важно отметить, что не все версии команд cut поддерживают многобайтовые символы. Например, Ubuntu и его производные не поддерживают многобайтовые символы.
Чтобы понять это, давайте выполним ту же команду в Linux Mint, который является производным от Ubuntu:
Здесь мы видим, что команда cut одинаково обрабатывает как многобайтовые, так и однобайтовые символы. Следовательно, он не генерирует ожидаемый результат.
7. Обрезаем строку разделителем в Linux
По умолчанию команда cut использует символ TAB в качестве разделителя. Тем не менее, мы можем переопределить это поведение по умолчанию с помощью опции -d
.
Часто опция -d
используется в сочетании с опцией -f
, которая используется для выбора определенного поля.
Чтобы понять это, давайте используем символ пробела в качестве разделителя и выведем первые два поля с помощью опции -f
:
$ cut -d " " -f 1,2 file.txt
В приведенном выше примере мы использовали запятую с опцией -f
для выбора нескольких полей.
8. Выведите все байты или символы, кроме выбранных
Иногда мы хотим напечатать все символы, кроме нескольких. В таких случаях мы можем использовать опцию --дополнить
. Как следует из названия, эта опция выводит все столбцы, кроме указанных.
$ cut -c 1 --complement file.txt
В приведенном выше выводе мы видим, что опция --complement
выводит все символы, кроме первого.
Важно отметить, что в этом примере мы использовали запятые для выбора нескольких полей. Тем не менее, мы также можем использовать другие поддерживаемые диапазоны. Мы можем обратиться к первым нескольким примерам этого руководства, чтобы узнать больше о диапазонах.
Заключение
В этом руководстве для начинающих мы рассмотрели практические примеры команды cut с фильтрацией текста на основе позиции байта, позиции символа и разделителя.
Знаете ли вы какой-нибудь другой лучший пример команды cut в Linux? Поделитесь с нами своим мнением в комментариях ниже.