Каково различие между-b сокращения и-c опцией?

Я искал онлайн примеры, прошел справочник cut управляйте и протестированный это самостоятельно и останьтесь не уверенными в -b флаг. Нет никаких ясных примеров относительно как cut -b работы команды. Кто-то может создать файл в качестве примера и показать, как он ясно используется?

0
задан 16 December 2018 в 08:04

1 ответ

Программное обеспечение GNU описано в info страницы, поэтому давайте посмотрим что info cut говорит:

СПИСОК БАЙТА ‘-b’ ‘-bytes=BYTE-LIST’
Выберите для печати только байтов в положениях, перечисленных в СПИСКЕ БАЙТА. Вкладки и клавиши Backspace рассматривают как любой другой символ; они поднимают 1 байт. Если выходной разделитель указан, (см. описание ‘-выходной разделитель’), то произведенный, что строка между диапазонами выбранных байтов.

СИМВОЛЬНЫЙ СПИСОК ‘-c’ ‘-characters=CHARACTER-LIST’
Выберите для печати только символов в положениях, перечисленных в СИМВОЛЬНОМ СПИСКЕ. То же как ‘-b’ на данный момент, но интернационализация изменит это. Вкладки и клавиши Backspace рассматривают как любой другой символ; они поднимают 1 символ. Если выходной разделитель указан, (см. описание ‘-выходной разделитель’), то произведенный, что строка между диапазонами выбранных байтов.

Это от coreutils 8.28, который идет с Ubuntu 18.04 и 18.10, добавляя, что многобайтовая поддержка происходит и может включить другое поведение этих двух опций в будущем.

xxd -g1 шоу hexdump эквиваленты байта символов (после двоеточия) сгруппировали bytewise, а также его представление ASCII слева. Возьмите в качестве примера:

$ printf a | xxd -g1
00000000: 61                                               a
$ printf á | xxd -g1
00000000: c3 a1                                            ..

a однобайтовый символ с шестнадцатеричными эквивалентными 61, в то время как á двухбайтовый символ с шестнадцатеричным эквивалентным c3 a1. Давайте посмотрим как cut от coreutils 8.28 ведет себя, если мы пытаемся отключить первый байт или символ соответственно (0a просто символ новой строки, добавленный cut и может быть проигнорирован):

$ printf ab | cut -b1 | xxd -g1
00000000: 61 0a                                            a.
$ printf ab | cut -c1 | xxd -g1
00000000: 61 0a                                            a.
$ printf áb | cut -b1 | xxd -g1
00000000: c3 0a                                            .. # first byte of á
$ printf áb | cut -b2 | xxd -g1
00000000: a1 0a                                            .. # second byte of á
$ printf áb | cut -c1 | xxd -g1
00000000: c3 0a                                            .. # first byte of á
$ printf áb | cut -c2 | xxd -g1
00000000: a1 0a                                            .. # second byte of á

Когда это реализовано, ожидаемое поведение:

$ printf ab | cut -b1 | xxd -g1
00000000: 61 0a                                            a.
$ printf ab | cut -c1 | xxd -g1
00000000: 61 0a                                            a.
$ printf áb | cut -b1 | xxd -g1
00000000: c3 0a                                            ..  # first byte of á
$ printf áb | cut -b2 | xxd -g1
00000000: a1 0a                                            ..  # second byte of á
$ printf áb | cut -c1 | xxd -g1
00000000: c3 a1 0a                                         ... # both bytes of á
$ printf áb | cut -c2 | xxd -g1
00000000: 62 0a                                            b.  # second char = b
2
ответ дан 26 October 2019 в 20:26

Другие вопросы по тегам:

Похожие вопросы: