LINUX.ORG.RU

Perl - объединение строк


0

0

Как перлом объединить две строки, если следующая начинается с определенного символа? Например:

11 11111 1
+ 222
333 33 333
44444 44 4
|
V
11 11111 1 222
333 33 333
44444 44 4

Хорошо бы без флагов и промежуточных буферов. Как вообще делать многострочный поиск типа /abc\ndef/ ?
Спасибо за внимание.


$ cat test1.txt 
11 11111 1
+ 222
333 33 333
44444 44 4 
$ cat test1.txt | perl -0 -pe 's/\n\s*\+//g'
11 11111 1 222
333 33 333
44444 44 4

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

Кажется разобрался:

undef $/;
while(<IN>)
{
s/\n\s*\+//g;
print
}


Однако для того, чтобы найти что-то вроде
...
...
жили-были старик
со старухой
...
...

придеться перед этим делать undef $/, а потом обратно $/ = "\n", что неудобно.

mosfet
() автор топика
Ответ на: комментарий от mosfet

> undef $/;
> while(<IN>)
> {
> s/\n\s*\+//g;
> print
> } 
> 
> придеться перед этим делать undef $/, а потом обратно $/ = "\n", 
> что неудобно.

{
    local $/;
    while(<IN>)
    {
        s/\n\s*\+//g;
        print
    } 
}

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

Да, про local как-то не подумал, спасибо.

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