LINUX.ORG.RU

Вопрос про regexp'ы


0

0

Вопрос наверное совсем идиотский, но... Нужно grep'ом найти определенную
строку, за которой следует пустая строка. Например:

$ cat abc
abc
abc

abc

Нужно, чтобы grep отфильтровал только вторую строку. Пробовал по-всякому
уже, не получается, скажем:

cat abc | grep "abc\n\n"
cat abc | grep "abc$^$"
cat abc | grep "abc$^.*$"
...

Как же правильно-то? 8/

anonymous

Ответ на: комментарий от lego_12239

2 lego_12239: Не то, мне нужен regexp, соответствующий моим условиям, то есть _определенная_ строка, а следом -- пустая строка. Использовать этот regexp я, в общем-то, буду в sed :-)

anonymous
()

регексп в grep по своему замыслу относится только к одной строке

Открой для себя awk, все в лоб делается:

cat file | awk 'BEGIN { flag=0 } /abc/ { prev=$0; flag=1 } (/^$/ && flag == 1) { print prev } !/abc/ { flag=0 }'

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

Ну почему сложности? Неужели нет такого регулярного выражения, которое соответствовало бы моим требованиям? Нужно просто заменить определенную строку и следующую за ней пустую строку на что-нибудь, типа так:

sed 's/\(some_string\)\n/\1 blahblahblah/'

anonymous
()
Ответ на: комментарий от lego_12239

Я к тому, что напрямую, думаю, не получится - это ж тебе не перл.

lego_12239
()
Ответ на: комментарий от dilmah

awk(TM) -- любая построчная обработка у Ваших ног

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

Сложности, возникают тогда, когда начинаешь понимать как работают regexp'ы; а когда не понимаешь, то и сложностей нет.

Для указанного варианта(замена) немного меняется указанный dilmah способ. И все.

lego_12239
()

Понятно, всем спасибо! Просто думал sed'ом можно это решить, копаю в сторону awk :-)

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