Linux обрезать строку до символами

Содержание
  1. Команда Cut в Linux с примерами
  2. Linux Cut Command with Examples
  3. В этом руководстве мы покажем вам, как использовать cut команду, на практических примерах и подробных объяснениях наиболее распространенных опций.
  4. Как использовать cut команду
  5. Как вырезать по полю
  6. Как резать на основе разделителя
  7. Как дополнить выбор
  8. Как указать выходной разделитель
  9. Как вырезать из байтов и символов
  10. Примеры
  11. Получить список всех пользователей
  12. Посмотреть 10 наиболее часто используемых команд
  13. Вывод
  14. [bash] Как обрезать строку до первого разделителя?
  15. Re: [bash] Как обрезать строку до первого разделителя?
  16. Re: [bash] Как обрезать строку до первого разделителя?
  17. Re: [bash] Как обрезать строку до первого разделителя?
  18. Re: [bash] Как обрезать строку до первого разделителя?
  19. Re: [bash] Как обрезать строку до первого разделителя?
  20. Re: [bash] Как обрезать строку до первого разделителя?
  21. Re: [bash] Как обрезать строку до первого разделителя?
  22. Re: [bash] Как обрезать строку до первого разделителя?
  23. Re: [bash] Как обрезать строку до первого разделителя?
  24. Re: [bash] Как обрезать строку до первого разделителя?
  25. Re: [bash] Как обрезать строку до первого разделителя?
  26. Re: [bash] Как обрезать строку до первого разделителя?
  27. Re: [bash] Как обрезать строку до первого разделителя?
  28. Re: [bash] Как обрезать строку до первого разделителя?
  29. Re: [bash] Как обрезать строку до первого разделителя?
  30. Re: [bash] Как обрезать строку до первого разделителя?
  31. Re: [bash] Как обрезать строку до первого разделителя?
  32. Re: [bash] Как обрезать строку до первого разделителя?
  33. Команда cut Linux
  34. Синтаксис команды cut
  35. Параметры cut
  36. Примеры использования cut в Linux
  37. 1. Работа с байтами
  38. 2. Работа с символами
  39. 3. Работа со столбцами
  40. Выводы
  41. Оцените статью:
  42. Об авторе
  43. 6 комментариев

Команда Cut в Linux с примерами

Linux Cut Command with Examples

В этом руководстве мы покажем вам, как использовать cut команду, на практических примерах и подробных объяснениях наиболее распространенных опций.

В системах Linux и Unix доступно множество утилит, позволяющих обрабатывать и фильтровать текстовые файлы. cut утилита командной строки, которая позволяет вырезать части строк из указанных файлов или данных по конвейеру и выводить результат в стандартный вывод. Его можно использовать для вырезания частей строки по разделителю, позиции байта и символу.

Как использовать cut команду

Синтаксис cut команды следующий:

Параметры, указывающие cut , использовать ли разделитель, позицию байта или символ при вырезании выделенных частей, выглядят следующим образом:

  • -f ( —fields=LIST ) — Выберите, указав поле, набор полей или диапазон полей. Это наиболее часто используемый вариант.
  • -b ( —bytes=LIST ) — Выберите, указав байт, набор байтов или диапазон байтов.
  • -c ( —characters=LIST ) — Выберите, указав символ, набор символов или диапазон символов.

Вы можете использовать один и только один из вариантов, перечисленных выше.

  • -d ( —delimiter ) — Укажите разделитель, который будет использоваться вместо разделителя «TAB» по умолчанию.
  • —complement — дополнить выбор. При использовании этого параметра cut отображаются все байты, символы или поля, кроме выбранного.
  • -s ( —only-delimited ) — по умолчанию cut печатает строки, которые не содержат символов-разделителей. Когда эта опция используется, cut не печатать строки, не содержащие разделителей.
  • —output-delimiter — По умолчанию cut используется входной разделитель в качестве выходного разделителя. Эта опция позволяет вам указать другую строку выходного разделителя.

Команда cut может принимать ноль или более входных имен FILE. Если не FILE указано, или когда FILE есть — , cut будет читать со стандартного ввода.

LIST Аргумент , переданный -f , -b и -c варианты могут быть целым числом, несколько целых чисел , разделенных запятыми, диапазон целых чисел или нескольких диапазонов целочисленных разделенных запятыми. Каждый диапазон может быть одним из следующих:

  • N N-е поле, байт или символ, начиная с 1.
  • N- от N-го поля, байта или символа до конца строки.
  • N-M от N-го до M-го поля, байта или символа.
  • -M от первого до M-го поля, байта или символа.

Как вырезать по полю

Чтобы указать поля, которые должны быть вырезаны, вызовите команду с -f опцией. Если не указан, по умолчанию используется разделитель «TAB».

В приведенных ниже примерах мы будем использовать следующий файл. Поля разделены вкладками.

Например, для отображения 1-го и 3-го полей вы должны использовать:

Или, если вы хотите отобразить с 1-го по 4-е поле:

Как резать на основе разделителя

Чтобы вырезать на основе разделителя, вызовите команду с -d параметром, а затем разделитель, который вы хотите использовать.

Например, чтобы отобразить 1-е и 3-е поля, используя «:» в качестве разделителя, введите:

Вы можете использовать любой отдельный символ в качестве разделителя. В следующем примере мы используем символ пробела в качестве разделителя и печатаем 2-е поле:

Как дополнить выбор

Для дополнения списка полей выбора используйте —complement опцию. Это напечатает только те поля, которые не выбраны с -f опцией.

Следующая команда напечатает все поля кроме 1-го и 3-го:

Как указать выходной разделитель

Чтобы указать выходной разделитель, используйте —output-delimiter опцию. Например, чтобы установить для _ вас выходной разделитель , используйте:

Как вырезать из байтов и символов

Прежде чем идти дальше, давайте сделаем различие между байтами и символами.

Один байт составляет 8 битов и может представлять 256 различных значений. Когда был установлен стандарт ASCII, в нем были учтены все буквы, цифры и символы, необходимые для работы с английским языком. Таблица символов ASCII имеет 128 символов, и каждый символ представлен одним байтом. Когда компьютеры стали доступны во всем мире, технологические компании начали вводить новые кодировки символов для разных языков. Для языков, содержащих более 256 символов, простое сопоставление 1 к 1 было невозможно. Это приводит к различным проблемам, таким как совместное использование документов или просмотр веб-сайтов, и был необходим новый стандарт Unicode, который может работать с большинством мировых систем письма. UTF-8 был создан для решения этих проблем. В UTF-8 не все символы представлены 1 байтом. Символы могут быть представлены от 1 байта до 4 байтов.

Опция -b ( —bytes ) указывает команде вырезать секции из каждой строки, заданной заданными позициями байтов.

В следующих примерах мы используем ü символ, который занимает 2 байта.

Выберите 5-й байт:

Выберите 5-й, 9-й и 13-й байты:

Выберите диапазон от 1-го до 5-го байта:

На момент написания этой статьи версия пакета cut в GNU coreutils не имела возможности обрезать по символам. При использовании -c параметра cut ведет себя так же, как при использовании -b параметра.

Примеры

Команда cut обычно используется в сочетании с другими командами через трубопровод. Вот несколько примеров:

Получить список всех пользователей

Выходные данные getent passwd команды передаются в cut , который печатает 1-е поле, используя в : качестве разделителя.

Посмотреть 10 наиболее часто используемых команд

В следующем примере cut используется для удаления первых 8 байтов из каждой строки history вывода команды.

Вывод

cut Команда используется для отображения выбранных полей из каждой строки заданных файлов или стандартного ввода.

Хотя это очень полезно, cut имеет некоторые ограничения. Он не поддерживает указание более одного символа в качестве разделителя и не поддерживает несколько разделителей.

Источник

[bash] Как обрезать строку до первого разделителя?

Подскажите, как обрезать строку до первого символа-разделителя.

Re: [bash] Как обрезать строку до первого разделителя?

в man bash это есть (%, %%, #, ##)

Re: [bash] Как обрезать строку до первого разделителя?

Но учитывая, что башизмы считаются плохим тоном, то лучше резать седом: str=»`echo $str | sed ‘s/^[^:]+//’`»

Подразумевается, что разделитель «:».

Re: [bash] Как обрезать строку до первого разделителя?

это имо не башизм — по крайней мере эти конструкции есть и в ksh

Re: [bash] Как обрезать строку до первого разделителя?

> это имо не башизм — по крайней мере эти конструкции есть и в ksh

На посиксшеллизм это всё равно мало похоже 🙂

Re: [bash] Как обрезать строку до первого разделителя?

Re: [bash] Как обрезать строку до первого разделителя?

> 1. echo «$SUBJECT» | grep bash

Ты в первый раз встречаешь, что шелл как таковой «башем» называют?

> 2. Чего сразу ‘sed’? cut не хватает?

Re: [bash] Как обрезать строку до первого разделителя?

Это конечно не будет работать.

Re: [bash] Как обрезать строку до первого разделителя?

awk уже не в моде?

Re: [bash] Как обрезать строку до первого разделителя?

> Это конечно не будет работать.

str=»`echo «$str» | sed -r ‘s/^[^:]+//’`», если быть более точным

Re: [bash] Как обрезать строку до первого разделителя?

echo bash rules | (read i j; echo $i)

Если, конечно, символ-разделитель — это что-то из $IFS

Re: [bash] Как обрезать строку до первого разделителя?

> str=»`echo «$str» | sed -r ‘s/^[^:]+//’`», если быть более точным

Нет, это ещё хуже 🙁

Re: [bash] Как обрезать строку до первого разделителя?

Re: [bash] Как обрезать строку до первого разделителя?

>> str=»`echo «$str» | sed -r ‘s/^[^:]+//’`», если быть более точным
> Нет, это ещё хуже 🙁

А что тебе не нравится, кроме того, что тут я иду через (неразборчиво) и не использую cut?

Re: [bash] Как обрезать строку до первого разделителя?

Что будет если str='»abc»‘ или str=»abc ABC»

Re: [bash] Как обрезать строку до первого разделителя?

> Что будет если str='»abc»‘ или str=»abc ABC»

Будет (неразборчиво). Ну а что ты хотел в условиях дефицита входных данных?

Re: [bash] Как обрезать строку до первого разделителя?

> Будет (неразборчиво). Ну а что ты хотел в условиях дефицита входных данных?

И это неправильный ответ. Ну зачем ты так быстро сдался? 😉

Вот правильный ответ с sed и echo, но только для bash, может кто есть умудрённее меня в шелле и поправит: str=$(echo » $str»|sed ‘s/^.\([^:]\+:\|\)//’)

Re: [bash] Как обрезать строку до первого разделителя?

Ну несколько строчек я тоже не распарсил 😉

Re: [bash] Как обрезать строку до первого разделителя?

На мой взгляд cut удобней

str=»первое поле: второе поле: третье поле»
echo $str | sed ‘s/\([^:]\):.*/\1/’
echo $str | cut -f1 -d:

Источник

Команда cut Linux

Команда cut используется, если нужно вырезать часть текста — при этом он может находиться в файле либо быть напечатанным через стандартный ввод. В Unix-системах эта команда удаляет секции текста, которые были обозначены при помощи байтов, символов или полей, разделенных знаками «-« и «:». Работу cut обеспечивает одноименная утилита. Она входит в состав GNU Coreutils, так что по умолчанию доступна во всех дистрибутивах Linux. Также ею можно воспользоваться на машинах с операционной системой BSD.

Мы постараемся подробно рассказать о том, как работать с командой cut, задействовав и стандартный ввод, и текстовые файлы. Ну и, как всегда, дадим примеры использования, чтобы тем, кто впервые сталкивается с выполнением этой команды, было на что ориентироваться.

Синтаксис команды cut

Написание команды cut выглядит следующим образом:

$ cut опции путь_к_файлу

Использовать файл не обязательно. Если на месте его названия поставить прочерк либо не указать ничего, команда возьмет текст из стандартного ввода. При необходимости можно указывать больше файлов, чем один.

Параметры cut

Список опций, которые позволяют управлять поведением команды:

  • -b (—bytes=LIST) — номер байта, набор или диапазон байтов, подлежащих вырезанию.
  • -c (—characters=LIST) — символ, который следует вырезать. Также можно указывать набор либо диапазон символов.
  • -d (—delimiter=DELIM) — с помощью этой опции пользователь устанавливает свой разделитель вместо стандартного TAB.
  • -f (—fields=LIST) — перечень полей для вырезания.
  • -s (—only-delimited) — если была применена эта опция, cut не выводит строки, где нет разделителя.
  • —complement — задает байты, символы или поля, которые останутся в файле или тексте из стандартного ввода. Все остальное будет вырезано.
  • —output-delimiter=STRING — по умолчанию выходной разделитель соответствует входному. Эта опция позволяет задать другой выходной разделитель.
  • -z, —zero-terminated — вместо символа новой строки разделителем будет NULL.

Это основные параметры команды cut, которые нам понадобятся при работе с утилитой.

Примеры использования cut в Linux

Прежде всего создадим файл cut_command_example.txt и поместим его в домашнюю директорию. В теле документа пропишем текст:

Winter: white: snow: frost
Spring: green: grass: warm
Summer: colorful: blossom: hot
Autumn: yellow: leaves: cool

1. Работа с байтами

На первый взгляд кажется, что с помощью байтов удобнее всего задавать координаты символов, которые нужно вырезать. Но не все так просто. В текстах, написанных на английском языке, каждый символ — это один байт, а вот в других языках некоторые буквы, цифры и спецсимволы могут занимать и два, и три, и четыре байта. Эту особенность следует учитывать, принимая во внимание систему кодировки текста, иначе результат выполнения команды будет не таким, как ожидалось.

Чтобы вырезать из текста, напечатанного через стандартный ввод, первый символ, команда cut должна иметь вид:

echo «The sky was yellow as brass.» | cut -b 1

Если же необходимо вырезать несколько символов, их номера указывают через запятую:

echo «I looked at my watch; not eight o’clock.» | cut -b 5,8,17

Нет ничего сложного и в том, чтобы вырезать некоторый диапазон символов. В этом случае номера символов указывают через дефис:

echo «Still I opened the gate, and put the petrol pump in readiness.» | cut -b 38-43

Когда в заданном диапазоне числовые значения превышают количество байт, содержащееся в тексте, на экран будет выведено сообщение об ошибке либо просто пустая строка (зависит от версии cut, которая установлена на компьютере).

Теперь рассмотрим те варианты использования команды, где нужно вырезать символы из текста, который находится в файле. Стандартная запись в терминале выглядит так:

cut -b 1,9 cut_command_example.txt

Как вы можете помнить, в созданном ранее документе было четыре строки. Команда в каждой из них вырезала символы, соответствующие указанным номерам байтов, и вывела их также построчно.

Примерно так же работает вырезание символов в заданном диапазоне. Диапазон — это два числа, написанные через дефис:

cut -b 12-20 cut_command_example.txt

Команду cut можно использовать саму по себе, но не возбраняется сочетать с другими командами. Чаще всего используется sort. Попробуем вырезать первые 4 символа и расположить строки в алфавитном порядке:

cut -b 1-7 cut_command_example.txt | sort

Для сортировки по алфавиту команде sort не нужны дополнительные опции. А вот чтобы расположить строки в обратном порядке, следует добавить к записи -r:

cut -b 1-7 cut_command_example.txt | sort -r

При помощи дефиса, который стоит рядом с числом, обозначающим номер байта, можно задавать неопределенные диапазоны символов. Например, чтобы команда вырезала все символы, начиная с пятого и заканчивая последним, нужно поставить дефис справа от числа:

cut -b 5- cut_command_example.txt

А чтобы были вырезаны все символы, начиная с первого байта и заканчивая шестнадцатым, дефис должен находиться справа от числа:

cut -b -25 cut_command_example.txt

Точно так же дефис используется, если текст задан не из файла, а через стандартный ввод:

echo «The pallid sunlight through the window shone upon my hands.» | cut -b -35

echo «The pallid sunlight through the window shone upon my hands.» | cut -b 35-

2. Работа с символами

Тем, кто обрабатывает огромные массивы текстовых данных, часто приходится использовать команду cut, задавая необходимые параметры с помощью символов. Если текст напечатан через стандартный ввод, вырезать первый символ можно так:

echo «She offered to help me, but that was not allowed.» | cut -c 1

Чтобы вырезать другие символы, следует указать их порядковые номера. Важно помнить о том, что если числовое значение превысит количество символов в строке, команда не будет выполнена.

echo «We worked till dusk, then washed and dressed.» | cut -c 12,31,45

При работе с символами можно использовать диапазоны значений, точно так же, как и при работе с байтами.

echo «The two cars were now racing side by side along the straight road.» | cut -c 17-52

Нередко возникает необходимость вырезать часть текста из готового документа. Чтобы сделать это, достаточно выполнить команду

cut -c 18,25 cut_command_example.txt

Как видно на скриншоте, были вырезаны восемнадцатый и двадцать пятый символы в каждой из строк.

Если же вырезать только первый символ в каждой строке при помощи команды

cut -c 1 cut_command_example.txt

результат будет таким же, как и у команды

cat cut_command_example.txt | cut -c 1

Чтобы вырезать из текстового файла диапазон символов, нужно напечатать в терминале следующую команду:

cut -c 7-34 cut_command_example.txt

Возможность сортировки вырезанных символов сохраняется независимо от того, в байтах или в символах команде cut были заданы параметры текста. Команда sort расставляет символы в алфавитном порядке по умолчанию:

cut -c 1-9 cut_command_example.txt | sort

Расстановка символов в обратном порядке — начиная с конца алфавита — требует применения опции -r:

cut -c 1-9 cut_command_example.txt | sort -r

Уже известный нам трюк с дефисом возле числа можно повторить и в данном случае:

echo «We had had fights for the same reason before now.» | cut -c 12-

Будет вырезана последовательность символов, начиная с двенадцатого и заканчивая последним в строке.

А чтобы вырезать символы, начиная с первого и заканчивая двенадцатым, дефис следует переместить влево:

echo «We had had fights for the same reason before now.» | cut -c -12

С текстом, содержащимся в файле, поступают аналогично:

cut -c -8 cut_command_example.txt

cut -c 8- cut_command_example.txt

Команда вырезает текст в каждой из строк, согласно заданным параметрам.

3. Работа со столбцами

Создавая файл cut_command_example.txt, мы отделяли слова друг от друга не только пробелами, но и двоеточиями. Наконец пришло время использовать эти знаки на практике. А нужны они для того, чтобы вырезать фрагменты текста из столбцов и называются разделителями. Кроме двоеточий и пробелов в качестве разделителей можно использовать дефисы.

Но начнем, как всегда, с текста в стандартном выводе. Чтобы вырезать слово из первого столбца, воспользуемся командой

echo «From the inn issued a smell of frying liver.» | cut -d ‘ ‘ -f 1

В случае с текстовым файлом результат такой же — первое слово каждого столбца напечатано в терминале:

cut -d ‘:’ -f 1 cut_command_example.txt

Чтобы вырезать несколько столбцов, нужно указать их номера. Для текста, напечатанного через стандартный ввод, команда имеет вид:

echo «He was extraordinarily particular about politeness in others.» | cut -d ‘ ‘ -f 1,2,3

В данном примере ее результатом должны быть первые три слова — He was extraordinarily.

При использовании текстового файла аналогичная команда выглядит так:

cut -d ‘:’ -f 1,2,3 cut_command_example.txt

Из файла были вырезаны три первые столбца, а их содержимое выведено в терминал.

Ничуть не хуже команда работает, если задать ей параметры текста в виде диапазона чисел:

echo «Surprised, we looked at one another.» | cut -d ‘ ‘ -f 1-5

Как и ожидалось, были вырезаны столбцы (слова) с первого по пятый. Обратите внимание на два апострофа, которые из раза в раз появляются в записи команды при работе с текстом из стандартного ввода. Эти знаки необходимы, если разделителем является символ пробела. Теперь вырежем диапазон полей из файла:

cut -d ‘:’ -f 1-3 cut_command_example.txt

Точно так же, как раньше сортировали вырезанные символы, мы можем поступить и сейчас — расставить названия сезонов из файла в алфавитном порядке:

cut -d ‘:’ -f 1 cut_command_example.txt | awk ‘‘ | sort

Меняя числовое значение опции -f, можно вырезать и сортировать содержимое других столбцов. Отсортировать названия сезонов в обратном порядке поможет опция -r, добавленная к команде sort:

cut -d ‘:’ -f 1 cut_command_example.txt | awk ‘‘ | sort -r

Вырезать содержимое, начиная с определенного столбца и заканчивая последним в строке, получится, если использовать такую команду, где справа от числа, обозначающего номер начального столбца, стоит дефис:

echo «We became still more friendly.» | cut -d ‘ ‘ -f 2-

Переместив дефис влево, мы сделаем этот столбец последним, а вырезать слова команда будет, начиная с первого столбца.

echo «We became still more friendly.» | cut -d ‘ ‘ -f -2

Работа этой команды с текстовыми файлами не имеет принципиальных отличий:

cut -d ‘:’ -f 2- cut_command_example.txt

cut -d ‘:’ -f -2 cut_command_example.txt

Команда cut также пригодится при работе с массивными CSV-документами. Ее синтаксис и опции в этом случае остаются неизменными. Например, при таком написании будут вырезаны первые два столбца файла с названием file_example.csv:

cut -d ‘,’ -f 1,2 file_example.csv

Выводы

Команда cut linux — это инструмент, который пригодится всем пользователям Linux, которые работают с большими текстовыми документами. Ее возможности поистине фантастические и она имеет немало преимуществ перед другими схожими утилитами.

Как всегда, не стесняйтесь задавать вопросы в комментариях, если какие-то аспекты работы этой команды остались непонятными для вас.

Нет похожих записей

Оцените статью:

Об авторе

Автор: Rubaiat Hossain

Больше восьми лет назад мною было принято решение объявить бойкот оконной монополии и установить на свой компьютер Ubuntu. С тех пор это моя основная ОС. Иногда в порядке эксперимента «подселяю» к ней собратьев из семьи Linux. Увлекаюсь фотографией и горным туризмом. В свободное от работы время пишу статьи для losst.ru.

6 комментариев

Когда в ГУЕ прог тьма, то она на фиг не нужна, но знать её надо.?

Да. Такое впечатление, будто вы не представляете работу в GNU без графической оболочки и где вообще можно применять консольные утилиты.

Это надо для написания скриптов в основном

товарищи, а как вырезать предпоследнее и последнее поле, если не знаешь общее количество полей?
(например, uslugi.mos.ru — > mos.ru или m.pay.vk.com ->vk.com)

нашел,
awk -F. ‘
но столкнулся с проблемой если запись с номером (FN-1) отсутствует, выдаёт ошибку

Через rev:
echo » One Two Three» | rev | cut -d ‘ ‘ -f -2 | rev
> Two Three
echo » One Two Three Four Five» | rev | cut -d ‘ ‘ -f -2 | rev
> Four Five

Источник

Читайте также:  Windows cannot open documents
Оцените статью