URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 77623
[ Назад ]

Исходное сообщение
"Простой shell-вопрос"

Отправлено Septima , 29-Ноя-07 16:45 
Есть данные, немного структурированные: идут по разделам - начало раздела с первого символа строки, остальные строки начинаются с пробела. Несколько разделов. Похоже на вывод ifconfig во фре или lspci -v  в линуксе. Данных много - порядка 100-200 кБ. Читать через less неудобно - нужна оперативность (перечитка по мере возникшей необходимости - от 10 секунд до 30 минут, не в этом дело). Подскажите, как можно выбрать только один раздел на уровне grep, sed, awk & etc? Источник может быть stdin или файл.

Содержание

Сообщения в этом обсуждении
"Простой shell-вопрос"
Отправлено angra , 30-Ноя-07 05:52 
может вам подойдет поиск в less, вызывается нажатием /
А так я бы написал простенький perl скрипт, который один раз считывает все данные в хеш с ключами по именам разделов, далее ожидает ввода имени раздела с клавиатуры и выводит элемент хеша с этим ключом. И так до тех пор пока не будет введена пустая строка, означающая выход

"Простой shell-вопрос"
Отправлено ShyLion , 30-Ноя-07 08:57 
>Есть данные, немного структурированные: идут по разделам - начало раздела с первого
>символа строки, остальные строки начинаются с пробела. Несколько разделов. Похоже на
>вывод ifconfig во фре или lspci -v  в линуксе. Данных
>много - порядка 100-200 кБ. Читать через less неудобно - нужна
>оперативность (перечитка по мере возникшей необходимости - от 10 секунд до
>30 минут, не в этом дело). Подскажите, как можно выбрать только
>один раздел на уровне grep, sed, awk & etc? Источник может
>быть stdin или файл.

по сути вопроса:
ifconfig | awk 'BEGIN {a=0}; {if(/^rl0:/ && a==0) {print;a=1} else {if(/^[[:space:]]+/ && a==1){print}else{a=0}}}'

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


"Простой shell-вопрос"
Отправлено ShyLion , 30-Ноя-07 09:23 
или так
ifconfig | awk 'BEGIN {a=0};/^xl0/{print;a=1};/^[[:space:]]+/ && a==1 {print};\!/^xl0/ && \!/^[[:space:]]+/{a=0};'