В примерах мы будем использовать такой файл:
$ cat test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
Содержание
1. Выборка колонок по символам
Для получения определённых колонок используется опция -c
. В следующем примере мы получим 2-ой символ (2 колонка) в каждой строке:
$ cut -c2 test.txt a p s
2. Выборка колонок по символам с диапазоном значений
Диапазон символов можно получить, указав стартовую и конечную позицию символом “-
“.
В следующем примере мы выделим символы с первого по третий в каждой строке:
$ cut -c1-3 test.txt cat cp ls
3. Выборка колонок с использованием стартовой или конечной позиции
Начальная или последняя позиция могут задавать с помощью опции -c
.
В следующем примере мы задаём только стартовую колонку, с которой начинать выборку, перед символом “-
“. Мы получим все символы, начиная с 3-го:
$ cut -c3- test.txt t command for file oriented operations. command for copy files or directories. command to list out files and directories with its attributes.
А в следующем примере – мы получим только первые 8 символов:
$ cut -c-8 test.txt cat comm cp comma ls comma
4. Выборка указанных полей
Вместо указания количества символов, можно задать выборку по целым полям, используя опции -d
и -f
. Опция -f
указывает поля, которые необходимо получить, а опция -d
– разделитель, по которым необходимо осуществлять разделение полей.
В следующем примере мы отобразим только первое поле файла /etc/passwd
, используя разделитель “:
” (двоеточие):
$ cut -d':' -f1 /etc/passwd root daemon bin sys sync games bala
5. Выборка различных полей
Вы так же можете осуществить выборку нескольких полей. В примере ниже будут выведены имена пользователей и домашние директории пользователей, у которых shell
задан как /bin/bash
:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 root:/root bala:/home/bala
Что бы отобразить диапазон полей – укажите начальное и последнее поле, как в примере ниже. Ниже мы осуществим выборку полей с 1 по 4, 6 и 7:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash bala:x:1000:1000:/home/bala:/bin/bash
6. Выборка полей, если строка содержит разделитель
В нашем примере с /etc/passwd
, если вы укажете разделитель отличный от “:
” – вы получите целую строку.
В следующем примере мы укажем разделителем пайп (“|
“), а утилита cut отобразит всю строку целиком, даже если такой разделитель не будет найден:
$ grep "/bin/bash" /etc/passwd | cut -d'|' -f1 root:x:0:0:root:/root:/bin/bash bala:x:1000:1000:bala,,,:/home/bala:/bin/bash
Однако, возможно отфильтровать строки, содержащие только разделитель, с использованием опции -s
.
В следующем примере не будет показано ничего, так как -s
отфильтрует строки, не содержащие разделитель “|
“:
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7. Выборка всех полей, кроме заданных
Что бы использовать выборку по полям, кроме заданных – используйте опцию --complement
.
В следующем примере вы выберем все поля, кроме поля 7:
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7 root:x:0:0:root:/root bala:x:1000:1000:bala,,,:/home/bala
8. Изменение разделителя в отображении результата
По умолчанию – в результатах разделитель будет тот же, который использовался при выборке.
Что бы изменить разделитель – используйте опцию --output-delimiter
.
В примере ниже – мы заменим разделитель “:
” на “#
“:
$ grep "/bin/bash" /etc/passwd | cut -d':' -s -f1,6,7 --output-delimiter='#' root#/root#/bin/bash bala#/home/bala#/bin/bash
9. Заменить разделитель на символ новой строки
В следующем примере каждое поле в результатах вывода cut
будет выведено в новой строке. Мы так же используем опцию --output-delimiter
, но укажем ей параметр “n
“:
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'n' bala /home/bala /bin/bash
10. Комбинирование утилиты Cut с другими утилитами Unix
Все возможности утилиты cut
могут проявится при её использовании с другими утилитами для обработки stdout
.
В следующем примере мы отобразим только самую нужную информацию из вывода утилиты ps
:
$ ps axu | grep python | sed 's/s+/ /g' | cut -d' ' -f2,11- 2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video 2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote 2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon 2463 /usr/bin/python /usr/lib/system-service/system-service-d 3274 grep --color=auto python