<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://aidalinux.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Cut</id>
	<title>Cut - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://aidalinux.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Cut"/>
	<link rel="alternate" type="text/html" href="https://aidalinux.ru/wiki/index.php?title=Cut&amp;action=history"/>
	<updated>2026-04-30T13:43:32Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://aidalinux.ru/wiki/index.php?title=Cut&amp;diff=69&amp;oldid=prev</id>
		<title>Langator: Новая страница: «== Описание ==  Команда cut позволяет выбрать из каждой строки файла нужную часть (по единому ...»</title>
		<link rel="alternate" type="text/html" href="https://aidalinux.ru/wiki/index.php?title=Cut&amp;diff=69&amp;oldid=prev"/>
		<updated>2011-03-23T15:11:48Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «== Описание ==  Команда cut позволяет выбрать из каждой строки файла нужную часть (по единому ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Описание ==&lt;br /&gt;
&lt;br /&gt;
Команда cut позволяет выбрать из каждой строки файла нужную часть (по единому правилу для всех строк) и показать выборку на экране дисплея.&lt;br /&gt;
&lt;br /&gt;
Команда имеет три основные опции:&lt;br /&gt;
* -b - когда объектом выбора являются байты;&lt;br /&gt;
* -с - когда объектом выбора являются символы;&lt;br /&gt;
* -f - когда объектом выбора являются элементы форматирования текста (колонки, столбцы и прочее).&lt;br /&gt;
&lt;br /&gt;
'''''Внимание:''''' Опции -c, -b, и -f могут употребляться только поодиночке.&lt;br /&gt;
&lt;br /&gt;
== Основные параметры ==&lt;br /&gt;
&lt;br /&gt;
=== Опция -с ===&lt;br /&gt;
&lt;br /&gt;
Например, возьмем файл /etc/shells, в целом виде он выглядит так:&lt;br /&gt;
  /bin/bash&lt;br /&gt;
  /bin/tcsh&lt;br /&gt;
  /bin/csh&lt;br /&gt;
  /bin/ash&lt;br /&gt;
  /bin/ksh&lt;br /&gt;
  /bin/zsh&lt;br /&gt;
&lt;br /&gt;
Теперь применим команду:&lt;br /&gt;
&lt;br /&gt;
  $ cut -c 1,5 /etc/shells&lt;br /&gt;
  //&lt;br /&gt;
  //&lt;br /&gt;
  //&lt;br /&gt;
  //&lt;br /&gt;
  //&lt;br /&gt;
  //&lt;br /&gt;
&lt;br /&gt;
В данном примере опция -c означает, что объектом выбора будут символы, цифры 1 и 5 означают, что мы выбираем первый и пятый символы строки (счет идет с 1), а все остальное содержимое файла игнорируется.&lt;br /&gt;
&lt;br /&gt;
Можно выбирать символы не по порядковым номерам, а диапазонами:&lt;br /&gt;
&lt;br /&gt;
  cut -c 1-5 /etc/shells&lt;br /&gt;
  /bin/&lt;br /&gt;
  /bin/&lt;br /&gt;
  /bin/&lt;br /&gt;
  /bin/&lt;br /&gt;
  /bin/&lt;br /&gt;
  /bin/&lt;br /&gt;
&lt;br /&gt;
В этом случае мы выбрали символы в диапазоне с 1 по 5 (включительно).&lt;br /&gt;
&lt;br /&gt;
Можно указать несколько диапазонов через запятую:&lt;br /&gt;
&lt;br /&gt;
  cut -c 1-5,8-9 /etc/shells&lt;br /&gt;
  /bin/sh&lt;br /&gt;
  /bin/sh&lt;br /&gt;
  /bin/h&lt;br /&gt;
  /bin/h&lt;br /&gt;
  /bin/h&lt;br /&gt;
  /bin/h&lt;br /&gt;
&lt;br /&gt;
Первые три примера имеют чисто демонстрационный характер и не имеют практического смысла. Следующий пример может претендовать на некий смысл:&lt;br /&gt;
&lt;br /&gt;
  $ cut -c 6- /etc/shells&lt;br /&gt;
  bash&lt;br /&gt;
  tcsh&lt;br /&gt;
  csh&lt;br /&gt;
  ash&lt;br /&gt;
  ksh&lt;br /&gt;
  zsh&lt;br /&gt;
&lt;br /&gt;
Тут мы получили список доступных в системе шеллов. Для этого мы не стали указывать правую границу диапазона, что заставляет команду выдавать все содержимое строк от указанного символа до конца строки. Можно оставить прочерк с левой стороны, тогда выборка пойдет от начала строки до указанного символа.&lt;br /&gt;
&lt;br /&gt;
Надеюсь, что с опцией -c ясность полная, можно переходить к следующей.&lt;br /&gt;
&lt;br /&gt;
=== Опция -b ===&lt;br /&gt;
&lt;br /&gt;
Весьма похожа на предыдущую опцию, как по способу задания выборки байт, так и по результатам, ведь в большинстве случаев один байт определяет один символ.&lt;br /&gt;
&lt;br /&gt;
  cut -b 1-6 /etc/shells&lt;br /&gt;
  /bin/b&lt;br /&gt;
  /bin/t&lt;br /&gt;
  /bin/c&lt;br /&gt;
  /bin/a&lt;br /&gt;
  /bin/k&lt;br /&gt;
  /bin/z&lt;br /&gt;
&lt;br /&gt;
Мы выбрали первые 6 байт из каждой строки файла /etc/shells.&lt;br /&gt;
&lt;br /&gt;
Точно так же как и с опцией -с, можно использовать способы выборки n,m; -n; и n-. Остается лишь добавить, что символы табуляции и backspace (возврат назад на один символ с удалением его) трактуются как любой другой символ - они и занимают один байт. (Не поручусь за национальные кодировки).&lt;br /&gt;
&lt;br /&gt;
=== Опция -f ===&lt;br /&gt;
&lt;br /&gt;
Объектом выбора данной опции являются те самые загадочные &amp;quot;поля&amp;quot;, которые так смущают в мане программы. Оказалось все просто. Выбираем мы колонки текста, или столбцы, или что еще там, разделенные знаком табуляции. Так как я таких файлов никогда не встречал, то пришлось создать специально для опытов. Вот содержимое файла tab.txt:&lt;br /&gt;
&lt;br /&gt;
  qwer	tyui	op[]&lt;br /&gt;
  asdf	ghjk	llll&lt;br /&gt;
  zxcv	bnm,	....&lt;br /&gt;
&lt;br /&gt;
А вот команда:&lt;br /&gt;
&lt;br /&gt;
  $ cut -f 1,2 tab.txt&lt;br /&gt;
  qwer    tyui&lt;br /&gt;
  asdf    ghjk&lt;br /&gt;
  zxcv    bnm,&lt;br /&gt;
&lt;br /&gt;
Все как ожидалось, выбраны две первые колонки. Еще пример:&lt;br /&gt;
&lt;br /&gt;
  cut -f 2- tab.txt&lt;br /&gt;
  tyui    op[]&lt;br /&gt;
  ghjk    llll&lt;br /&gt;
  bnm,    ....&lt;br /&gt;
&lt;br /&gt;
В общем понятно, схема та же, только с колонками. Вопрос в другом - где взять такие файлы с колонками, разделенными знаком табуляции, чтобы их обрабатывать?&lt;br /&gt;
&lt;br /&gt;
К счастью, есть опция -d, предназначенная для работы в паре с опцией -f и понимающая другие разделители текста, кроме знаков табуляции. В директории /etc полно файлов, содержащих столбцы данных, разделенных всякими разделителями; беда только, что они довольно длинные для примеров. Я возьму первые десять строчек из файла /etc/group и создам файл group10.txt.&lt;br /&gt;
&lt;br /&gt;
  cut -f 1- -d : group10.txt&lt;br /&gt;
  root::0:root&lt;br /&gt;
  bin::1:root,bin,daemon&lt;br /&gt;
  daemon::2:root,bin,daemon&lt;br /&gt;
  sys::3:root,bin,adm&lt;br /&gt;
  adm::4:root,adm,daemon&lt;br /&gt;
  tty::5:&lt;br /&gt;
  disk:!:6:root,adm,haldaemon,ya,alex&lt;br /&gt;
  lp::7:lp,ya,alex&lt;br /&gt;
  mem::8:&lt;br /&gt;
  kmem::9:&lt;br /&gt;
&lt;br /&gt;
В этом примере, опция -f приказывает отбирать все столбцы, с первого до последнего, а опция -d указывает на символ, являющийся разделителем -d : разделителем служит двоеточие. Выше на экране файл group10.txt полностью.&lt;br /&gt;
&lt;br /&gt;
  cut -f 1,3 -d : group10.txt&lt;br /&gt;
  root:0&lt;br /&gt;
  bin:1&lt;br /&gt;
  daemon:2&lt;br /&gt;
  sys:3&lt;br /&gt;
  adm:4&lt;br /&gt;
  tty:5&lt;br /&gt;
  disk:6&lt;br /&gt;
  lp:7&lt;br /&gt;
  mem:8&lt;br /&gt;
  kmem:9&lt;br /&gt;
&lt;br /&gt;
А сейчас мы отобрали первый и третий столбцы, то есть узнали идентификационный номер каждой группы. В остальном все те же правила выбора объекта, что и для прочих опций. Символы, разделяющие столбцы, разумеется, могут быть иными, нежели двоеточие. Их нужно задавать при помощи опции -d &amp;lt;символ&amp;gt;. Есть и более наглядный способ употребления опции -d. Вместо только что описанной конструкции (-d &amp;lt;символ&amp;gt;) пишем --delim=&amp;lt;символ&amp;gt;, это кажется более надежным, чем при помощи пробела.&lt;br /&gt;
&lt;br /&gt;
Небольшая хитрость. Во многих файлах символом разделения служит пробел, или несколько пробелов подряд (например файл /etc/fstab). Чтобы указать разделитель для таких файлов, нужно заключить пробел в кавычки (одинарные или двойные); только тогда програма поймет, что разделителем служит пробел:&lt;br /&gt;
&lt;br /&gt;
  cut -f 1-21 -d &amp;quot; &amp;quot;  /etc/fstab&lt;br /&gt;
  /dev/hda7        swap&lt;br /&gt;
  /dev/hdb5        swap&lt;br /&gt;
  /dev/hdb1        /&lt;br /&gt;
  devpts           /dev/pts         devpts&lt;br /&gt;
  proc             /proc&lt;br /&gt;
  usbfs                /proc/bus/usb&lt;br /&gt;
  /dev/hda1            /mnt/win_c&lt;br /&gt;
  /dev/hda5            /mnt/win_d&lt;br /&gt;
  /dev/fd0             /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
Как указать разделителем несколько пробелов, осталось неизвестным.&lt;br /&gt;
&lt;br /&gt;
=== Опция -s ===&lt;br /&gt;
&lt;br /&gt;
Опция -s употребляется с опцией -f и приказывает не выводить на экран строки, не содержащие символов-разделителей. Ясно даже мне.&lt;br /&gt;
&lt;br /&gt;
=== Опция -n ===&lt;br /&gt;
&lt;br /&gt;
Опция -n употребляется вместе с опцией -b (когда объектом выборки являются байты). Эта опция пишется первой и запрещает команде разбивать многобайтные символы. Другими словами, если символ записывается более чем одним байтом, и мы, указывая выборку, случайно попадем на такой многобайтный символ, то в выводе программы появятся вопросительные знаки, либо квадратики, свидетельствующие о том, что программа не до конца считала этот символ и не знает как его интерпретировать. Например:&lt;br /&gt;
&lt;br /&gt;
  cut -b 1-5 rus.txt&lt;br /&gt;
  йц?&lt;br /&gt;
  фы?&lt;br /&gt;
  яч?&lt;br /&gt;
&lt;br /&gt;
(Символы кириллицы в кодировке UTF-8 состоят из 2 байтов). Стоит добавить опцию -n, как команда перестанет пытаться читать часть многобайтного символа:&lt;br /&gt;
&lt;br /&gt;
  cut -n -b 1-5 rus.txt&lt;br /&gt;
  йц&lt;br /&gt;
  фы&lt;br /&gt;
  яч&lt;br /&gt;
&lt;br /&gt;
=== Опция --complement ===&lt;br /&gt;
&lt;br /&gt;
Встречается в версиях команды cut от GNU Coreutils. Но редко встречается в манах. Опция употребляется совместно с опциями -b, -c и -f. Эта опция дополнит выборку всеми остальными объектами выбора. Другими словами, те объекты, которые вы укажете, не появятся в выводе команды, зато все остальные - появятся. Например:&lt;br /&gt;
&lt;br /&gt;
  cut -f 1 --complement tab.txt&lt;br /&gt;
  tyui    op[]&lt;br /&gt;
  ghjk    llll&lt;br /&gt;
  bnm,    ....&lt;br /&gt;
&lt;br /&gt;
Указанный первый столбец не появился, зато остальные два оказались в выводе команды. Опция очень удобна, когда у вас множество столбцов или колонок текста, а вам нужно распечатать их все, за исключением одной-двух-трех.&lt;br /&gt;
&lt;br /&gt;
Опции --help и --version общеизвестны, и задерживаться на них я не буду.&lt;br /&gt;
&lt;br /&gt;
== Команда cut и символы кириллицы ==&lt;br /&gt;
&lt;br /&gt;
Некоторые новейшие версии программы cut, в некоторых дистрибутивах, неплохо справляются с кириллическими символами. Другие версии, в других дистрибутивах не справляются вовсе. Я было попытался дать несколько примеров с кириллицей, но результаты на разных машинах, на разных дистрибутивах, и с разными версиями команды могли только сбить читателя с толку, не внеся никакой ясности. Поэтому общие рекомендации: не бойтесь пробовать работать с родным языком, если не получается, обновите версию программы, не выходит - попробуйте дистрибутив с другой кодировкой по умолчанию.&lt;br /&gt;
&lt;br /&gt;
== Несколько слов о версиях ==&lt;br /&gt;
&lt;br /&gt;
В Линукс дистрибутивах в основном встречается команда cut от GNU Coreutils. Программа разрабатывается и новые версии появляются регулярно. Советую иметь новейшую стабильную версию. Мне попадались версии не первой свежести, которые откровенно &amp;quot;глючили&amp;quot; и не различали, скажем, опций -b и -c (cut (GNU coreutils) 5.97), а я-то думал, что так и надо. Поэтому при первом подозрении попробуйте другой дистрибутив (или LiveCD).&lt;br /&gt;
&lt;br /&gt;
== Резюме программы cut ==&lt;br /&gt;
&lt;br /&gt;
Программа применима и эффективно работает с регулярными файлами, те есть с файлами, где из строчки в строчку повторяется некая структура информации (всякого рода списки, перечни, распечатки и прочее). Трудно представить себе, как ее можно использовать с обычным текстом, не разбитым на строки. Наличие трех подходов (байты, символы и столбцы) к определению выборки позволяют добиться успеха почти в любом случае, не одним способом, так другим. Особенно полезной может быть команда в качестве фильтра в составе программных каналов (pipes).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Информация взята с [http://open-club.ru/main/reading/HuMan_cut open-club.ru]&lt;/div&gt;</summary>
		<author><name>Langator</name></author>
	</entry>
</feed>