[Решено] регулярное выражение вырезать часть строки от и до

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

[Решено] регулярное выражение вырезать часть строки от и до

Сообщение bars »

Привет.
Подскажите пожалуйста как лучше вырезать часть строки от и до?
Пример.
В FreeBSD использования свапа пункт в top динамический.
Пункт used появится только при активном использовании.

Код: Выделить всё

top -n 1 | awk '/Swap:/'
Swap: 9207M Total, 9207M Free
Последний раз редактировалось bars 26.06.2022 11:52, всего редактировалось 1 раз.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19413
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: регулярное выражение вырезать часть строки от и до

Сообщение Bizdelnick »

Используйте подстановку sed с захватом подстроки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 676
ОС: debian, fedora (i3-wm)

Re: регулярное выражение вырезать часть строки от и до

Сообщение olecya »

bars
А что надо то? Не хотите видеть used в строке? В awk есть поля $1 и количество полей, переменная NF
Добавлено (17:32):

Shell

top -bn 1 | awk '/Swap:/ && NF=4'
MiB Swap: 14760.0 total,
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: регулярное выражение вырезать часть строки от и до

Сообщение bars »

olecya писала:
20.06.2022 16:53
А что надо то? Не хотите видеть used в строке? В awk есть поля $1 и количество полей, переменная NF
Наоборот хотел понять как показать только used.
В FreeBSD пункт использования свапа динамический, used пункт появляется только если свап используется.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 676
ОС: debian, fedora (i3-wm)

Re: регулярное выражение вырезать часть строки от и до

Сообщение olecya »

Код: Выделить всё

awk '/Swap:/ && NF>5 {print $6 FS $7}'
Если не смущает пробельная строка при отсутствии used то:

Код: Выделить всё

awk '/Swap:/ {print $6 FS $7}'
Добавлено (22:04):
P.S. swapctl -hs должно всегда показывать
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: регулярное выражение вырезать часть строки от и до

Сообщение bars »

olecya писала:
20.06.2022 21:20
swapctl -hs
Самое то!
Спасибо.
Не пользовался раньше этой утилитой.
olecya писала:
20.06.2022 21:20
awk '/Swap:/ && NF>5 {print $6 FS $7}'
А что делает в данном примере && NF>5 и FS?
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 676
ОС: debian, fedora (i3-wm)

Re: регулярное выражение вырезать часть строки от и до

Сообщение olecya »

bars писал:
25.06.2022 15:23
А что делает в данном примере && NF>5 и FS?
NF - внутренняя переменная в которой определяется количество полей в каждой записи (строке).
bars писал:
20.06.2022 12:40
Пункт used появится только при активном использовании.
Когда появляется поле used, выражение NF>5 возвращает true а значит выполняется команда print.
FS - (она же опция -F) внутренняя переменная хранящая регулярное выражение описывающее входной разделитель полей. Правильно указывать OFS (выходной разделитель полей чтобы не путаться), но в данном случае текстовый процессор понимает и подставляет пробельный символ определенный по умолчанию в OFS.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: регулярное выражение вырезать часть строки от и до

Сообщение bars »

olecya писала:
20.06.2022 21:20
awk '/Swap:/ {print $6 FS $7}'

Код: Выделить всё

# top -n 1 | awk '/Swap:/'
Swap: 9918M Total, 47M Used, 9871M Free
Чуть поправил команду.

Код: Выделить всё

top -n 1 | awk '/Swap:/ && NF>5 {print $4 FS $5}'
47M Used,
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали: