LINUX.ORG.RU
ФорумAdmin

SED

 


0

2

Подскажите пож. по sed. Еть такие блоки:

aashgah
ashahhh
asdghah

ghjjjjj
asdfasg
2222222
ahahfhhh

asdgashg
asgasgaf
dfhsfgjs
dgahhdha

Нужно, найдя строку: 2222222 выбрать весь блок ее содержащий. Блоки разделяются пустой строкой.

Если каждый блок завершается пустой строкой, то так:

sed -rn ':a;N;/\n$/{/(^|\n)2222222\n/p;d};ba' << END
aashgah
ashahhh
asdghah

ghjjjjj
asdfasg
2222222
ahahfhhh

asdgashg
asgasgaf
dfhsfgjs
dgahhdha

END

anarquista ★★★★★
()
Ответ на: комментарий от anarquista

Я не очень хорошо умею в AWK, но скорее всего его использовать в данном случае лучше, потому что можно явно указать разделитель записей.

У меня получилось как-то так:

 gawk 'BEGIN{RS="\n\n"; FS="\n"} {for (i=1; i <= NF;i++) if ($i == 2222222) { print; break;}}'
anarquista ★★★★★
()
Ответ на: комментарий от anarquista

Спасибо. Последнее работает. Но не работает вот такая конструкция:

awk -v NUM=2222 'BEGIN{RS="\n\n"} /NUM/{print}'

не передается переменная в фильтр ...

anonymus123
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.