Linux обрезать строку до пробела

Содержание
  1. Shell script : How to cut part of a string
  2. [bash] Как обрезать строку до первого разделителя?
  3. Re: [bash] Как обрезать строку до первого разделителя?
  4. Re: [bash] Как обрезать строку до первого разделителя?
  5. Re: [bash] Как обрезать строку до первого разделителя?
  6. Re: [bash] Как обрезать строку до первого разделителя?
  7. Re: [bash] Как обрезать строку до первого разделителя?
  8. Re: [bash] Как обрезать строку до первого разделителя?
  9. Re: [bash] Как обрезать строку до первого разделителя?
  10. Re: [bash] Как обрезать строку до первого разделителя?
  11. Re: [bash] Как обрезать строку до первого разделителя?
  12. Re: [bash] Как обрезать строку до первого разделителя?
  13. Re: [bash] Как обрезать строку до первого разделителя?
  14. Re: [bash] Как обрезать строку до первого разделителя?
  15. Re: [bash] Как обрезать строку до первого разделителя?
  16. Re: [bash] Как обрезать строку до первого разделителя?
  17. Re: [bash] Как обрезать строку до первого разделителя?
  18. Re: [bash] Как обрезать строку до первого разделителя?
  19. Re: [bash] Как обрезать строку до первого разделителя?
  20. Команда cut в Linux
  21. Как использовать команду cut
  22. Как обрезать по полю
  23. Как вырезать по разделителю
  24. Чем дополнить подборку
  25. Как указать разделитель вывода
  26. Как обрезать по байтам и символам
  27. Примеры вырезок
  28. Получите список всех пользователей
  29. Посмотреть 10 наиболее часто используемых команд
  30. Выводы
  31. Как извлечь часть строки в Bash
  32. Связанные статьи:

Shell script : How to cut part of a string

I pasted the contents of your example into a file named so.txt .

$ cat so.txt | awk '< print $7 >' | cut -f2 -d" mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
answered Sep 18, 2010 at 15:46
4
    Thaks this is exactly what I wanted !
    – deimus
    Sep 18, 2010 at 16:00
    1
    useless use of cat and cut. awk can do all of it.
    – ghostdog74
    Sep 19, 2010 at 14:57
    4
    @user229426: You mean unnecessary use of cat and cut, not useless, don't you?
    – Manoj Govindan
    Sep 20, 2010 at 5:00
    This is a great explanation of using awk in combination with cut. I tried to get this exact thing for another use case and struggled a lot with awk man pages and awk tutorials. Thanks a lot for taking the time to explain your code!
    – Kevin G.
    Dec 22, 2015 at 12:28
Add a comment|
3

Use a regular expression to catch the id number and replace the whole line with the number. Something like this should do it (match everything up to "id mt24">

)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
)">edited Sep 18, 2010 at 16:12
answered Sep 18, 2010 at 15:51
2
    this method gives 9 and 1 but it should be 9 and 10
    – deimus
    Sep 18, 2010 at 15:57
    Right, I've made a mistake when pasting the sed line. Updated it to work correctly.
    – bluebrother
    Sep 18, 2010 at 16:12
Add a comment|
2

A perl-solution:

perl -nE 'say $1 if /id=(\d+)/' filename

Источник

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

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

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

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

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

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

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

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

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

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

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

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

1. echo "$SUBJECT" | grep bash 2. Чего сразу 'sed'? cut не хватает?

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

> 1. echo "$SUBJECT" | grep bash

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

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

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

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

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

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="abcABC"

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

> Что будет если str='"abc"' или str="abcABC"

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

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

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

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

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

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

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

Источник

Команда cut в Linux

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

В этой статье мы покажем вам, как использовать команду 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 — - , cut будет читать из стандартного ввода.

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

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

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

Чтобы указать поля, которые следует вырезать, вызовите команду с параметром -f . Если не указано иное, разделителем по умолчанию является «ТАБЛИЦА».

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

245:789 4567 M:4540 Admin 01:10:1980 535:763 4987 M:3476 Sales 11:04:1978 

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

245:789 M:4540 535:763 M:3476 

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

245:789 4567 M:4540 Admin 535:763 4987 M:3476 Sales 

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

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

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

245:4540 Admin 01 535:3476 Sales 11 

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

echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2

Чем дополнить подборку

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

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

cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980 4987 Sales 11:04:1978 

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

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

cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540 535:763_M:3476 

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

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

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

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

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

echo 'drüberspringen' | cut -b 5

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

echo 'drüberspringen' | cut -b 5,9,13

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

echo 'drüberspringen' | cut -b 1-5

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

Примеры вырезок

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

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

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

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

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

history | cut -c8- | sort | uniq -c | sort -rn | head

Выводы

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

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

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

Источник

Как извлечь часть строки в Bash

Необходимо из строки вырезать подстроку определённой длины. Это можно сделать в терминале. Можно указать позицию начального символа в строке и её длину.

Самый простой способ — это использовать команду cut:

С опцией -c команда cut указываются номер первого и последнего символа включительно для вырезаемой подстроки.

Если вы используете Bash (обычно так и есть), то в нём предусмотрены другие способы как вырезать подстроку из строки.

Обратите внимание, что ПАРАМЕТР — это НЕ строка из которой вы хотите извлечь подстроку, это имя переменной!

Рассмотрим следующий пример:

То есть переменной a присвоено значение abcdefghij и из того значения во второй строке вырезается подстрока, которая начинается с пятого символа и заканчивается последним символом.

Если указать ДЛИНУ, то можно вырезать строку определённой длины, начинающейся с определённого символа:

Если нужно заменить подстроку на строку используйте:

Если нужно удалить статичную строку:

Пример с удалением префикса:

Пример с удалением суффикса:

Связанные статьи:

Источник

Читайте также:  Аналог conio h linux
Оцените статью
Adblock
detector