LINUX.ORG.RU

Sed, удалить кроме


0

0

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

Вообще задача такая, есть файл:
text1<A>link1<B> text2<A>link2<B>text3<A>link3<B>
text4<A>link4<B>
<links>

из которого требуется получить такое:
text1 text2text3
text4

link1
link2
link3
link4

по сути - собрать сноски и вывести их вместо строки <links>

на данный момент придумал только такое:

/\(<A>\)\(\([^<]\)*\)\(<B>)/{
H
x
{
/<A>\(\([^<]\)*\)<B>/{
s//\1/g
}
}
x
s///g
}

/<links>.*/{
x
p
x
}

Но работает не доконца как нужно..в конце выводит и текст и линк.
поэтому и возник у меня такой вопрос - как можно из строки удалить ВСЕ кроме вхождений части регулярного выражения (в моем варианте надо сохранить то, что находится между <A> и <B>)?

imho, sed не подходит для такой задачи.

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

да в том то и дело, что хочется средствами SED
...чтото не верится, неужели нельзя удалить все кроме регулярки??

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

> ...чтото не верится, неужели нельзя удалить все кроме регулярки??

можно конечно... можно и на машине тьюринга реализовать сбалансированные деревья... =)

*разбирайся: |sed -rn '/([^<]*)<A>([^<]*)<B>(.*)/ {:l s//\1\3\n\2/;tl;P;s/[^\n]*\n//;H};/<links>/{x;p}' * %)

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