<Предыдущая | Содержание: | Следующая>
вырезать
The вырезать Программа используется для извлечения части текста из строки и вывода извлеченной части на стандартный вывод. Он может принимать несколько аргументов файла или ввод со стандартного ввода.
Указание части строки, которую нужно извлечь, несколько неудобно и задается с помощью следующих параметров:
Таблица 20-3: Параметры выбора вырезки
Вариант Описание
Вариант Описание
-c список_символов Извлеките часть строки, определенную список_символов. Список может состоять из одного или нескольких числовых диапазонов, разделенных запятыми.
-f список полей Извлеките одно или несколько полей из строки, как определено
список полей. Список может содержать одно или несколько полей или диапазонов полей, разделенных запятыми.
-d delim_char После появления -f указано, используйте delim_char как символ, ограничивающий поля. По умолчанию поля должны быть разделены одним символом табуляции.
--complement Извлечь всю строку текста, кроме этих частей
указано -c и / или -f.
Как видим, путь вырезать извлекает текст довольно негибкий. вырезать лучше всего использовать для извлечения текста из файлов, созданных другими программами, а не текста, непосредственно вводимого людьми. Мы посмотрим на наши дистрибутивы.txt файл, чтобы проверить, достаточно ли он «чист», чтобы служить хорошим образцом для нашего вырезать Примеры. Если мы используем кошка с -A вариант, мы можем увидеть, соответствует ли файл нашим требованиям к полям, разделенным табуляцией:
[я @ linuxbox ~] $ кошка -A дистрибутив.txt
SUSE ^ I10.2 ^ I12 / 07/2006 $
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
[я @ linuxbox ~] $ кошка -A дистрибутив.txt
SUSE ^ I10.2 ^ I12 / 07/2006 $
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
SUSE ^ I10.1 ^ I05 / 11/2006 $
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
SUSE ^ I10.1 ^ I05 / 11/2006 $
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
Это выглядит хорошо. Никаких встроенных пробелов, только отдельные символы табуляции между полями. Поскольку в файле используются табуляции, а не пробелы, мы будем использовать -f возможность извлечения поля:
[я @ linuxbox ~] $ вырезать -f 3 distros.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
[я @ linuxbox ~] $ вырезать -f 3 distros.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
Потому что наши дистрибутивы файл разделен табуляцией, лучше использовать вырезать для извлечения полей, а не символов. Это связано с тем, что, когда файл разделен табуляцией, маловероятно, что каждая строка будет содержать одинаковое количество символов, что затрудняет или делает невозможным вычисление позиций символов в строке. Однако в нашем примере выше мы извлекли поле, которое, к счастью, содержит данные одинаковой длины, поэтому мы можем показать, как работает извлечение символов, извлекая год из каждой строки:
[я @ linuxbox ~] $ cut -f 3 distros.txt | вырезать -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
[я @ linuxbox ~] $ cut -f 3 distros.txt | вырезать -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
2007
2007
2006
2006
2008
2006
2008
2006
2007
2007
2006
2006
2008
2006
2008
2006
Запустив вырезать во второй раз в нашем списке мы можем извлечь позиции символов с 7 по 10, что соответствует году в нашем поле даты. В 7-10 обозначение является примером диапазона. В вырезать Справочная страница содержит полное описание того, как можно указывать диапазоны.
Расширяющиеся вкладки
Наша команда дистрибутивы.txt файл идеально отформатирован для извлечения полей с помощью вырезать. Но что, если нам нужен файл, которым можно было бы полностью управлять с помощью вырезать по символам, а не по полям? Это потребует от нас замены символов табуляции в файле на соответствующее количество пробелов. К счастью, в пакете GNU Coreutils есть инструмент для этого. Именованный расширять, эта программа принимает один или несколько аргументов файла или стандартный ввод и выводит измененный текст в стандартный вывод.
Если мы обработаем наши дистрибутивы.txt файл с расширять, Мы можем использовать вырезать -c для извлечения любого диапазона символов из файла. Например, мы могли бы использовать следующую команду, чтобы извлечь год выпуска из нашего списка, развернув файл и используя вырезать чтобы извлечь каждый символ с двадцать третьей позиции до конца строки:
[я @ linuxbox ~] $ развернуть distros.txt | вырезать -c 23-
Coreutils также предоставляет не раскрывать программа для замены табуляции пробелами.
При работе с полями можно указать другой разделитель полей вместо символа табуляции. Здесь мы извлечем первое поле из / И т.д. / пароль файл:
[я @ linuxbox ~] $ вырезать -d ':' -f 1 / etc / passwd | голова
корневой демон
[я @ linuxbox ~] $ вырезать -d ':' -f 1 / etc / passwd | голова
корневой демон
bin sys sync игры man lp mail новости
bin sys sync игры man lp mail новости
Посмотрите на график -d вариант, мы можем указать символ двоеточия в качестве разделителя поля.