Проверка блоками

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

Модераторы: /dev/random, Модераторы разделов

Ответить
sedikpoll
Сообщения: 100

Проверка блоками

Сообщение sedikpoll »

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

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

новая строка, форум её убирает
новая строка, форум её убирает
=========================


1.2.11.10


=========================
1.2.11.11
test
abc123

=========================
1.2.11.12


=========================
1.2.11.13


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

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

новая строка, форум её убирает
новая строка, форум её убирает
=========================
1.2.11.10


=========================
1.2.11.12


=========================
1.2.11.13


т.е. пустые блоки. Каждый блок это:

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

новая строка, форум её убирает
новая строка, форум её убирает
=========================
IP


Понимаю что нужно как то проверять на вхождение перенос+"="+IP строки, но не знаю как осуществить.
Подскажите как можно исключить текст блоками в данном случаи.
Спасибо.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Проверка блоками

Сообщение SLEDopit »

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

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

sed -n '/===/{N;p;x;p;p;x}'


Если пустые строки не нужны, то часть с x;p;p;x нужно выкинуть.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
nerve
Сообщения: 280
ОС: OpenBSD

Re: Проверка блоками

Сообщение nerve »

SLEDopit писал(а):
10.07.2014 12:21
Если я правильно понял задачу ( неясно только, обязательны ли пустые строки между блоками ), то примерно вот так нужно:

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

sed -n '/===/{N;p;x;p;p;x}'


Если пустые строки не нужны, то часть с x;p;p;x нужно выкинуть.

ему надо удалить те блоки, где нет текста после IP, то есть удалить целиком блоки, где после IP две пустые строки

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

$ sed -n '/===/{N;p;x;p;p;x}' text
=========================
1.2.11.10


=========================
1.2.11.11


=========================
1.2.11.12


=========================
1.2.11.13
Спасибо сказали:
sedikpoll
Сообщения: 100

Re: Проверка блоками

Сообщение sedikpoll »

*исправлены примеры
nerve, верно.

sed -n действительно должен решить задачу, спасибо за пример.
Возможно я не совсем верно описал что хочу получить.

Есть:

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

новая строка, форум её убирает
новая строка, форум её убирает
=========================
1.2.11.10


=========================
1.2.11.11
test
abc123

=========================
1.2.11.12


=========================
1.2.11.13


Нужно получить что то вроде:

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

=========================
1.2.11.11
test
abc123


т.е. нужно удалить блоки следующего содержания
=========================
IP
новая строка, форум её убирает
новая строка, форум её убирает


а все остальное выводить.

sed -n '/=/,/{пока не понял как указать две новых строки }/!p'
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Проверка блоками

Сообщение SLEDopit »

А, ну тогда как-то так:

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

sed ':a;N;/\n=/{/\.[0-9]\+\n\+=/!{p;s/.*\n=/=/};/\.[0-9]\+\n\+=/s/.*\n=/=/};$!ba;${/.*\.[0-9]\+\n\+/d}'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Ответить