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

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

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

sedikpoll
Сообщения: 100

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

Сообщение sedikpoll » 10.07.2014 11:42

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

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

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


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
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

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

Сообщение SLEDopit » 10.07.2014 12:21

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

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

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
Сообщения: 267
ОС: OpenBSD

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

Сообщение nerve » 10.07.2014 12:52

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 » 10.07.2014 13:03

*исправлены примеры
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
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

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

Сообщение SLEDopit » 10.07.2014 15:30

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

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

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.
Спасибо сказали: