The grep alternative sift supports multiline matching (disclaimer: I am the author).
Suppose testfile contains:
<book>
<title>Lorem Ipsum</title>
<description>Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua</description>
</book>
sift -m '<description>.*?</description>' (show the lines containing the description)
Result:
testfile: <description>Lorem ipsum dolor sit amet, consectetur
testfile: adipiscing elit, sed do eiusmod tempor incididunt ut
testfile: labore et dolore magna aliqua</description>
sift -m '<description>(.*?)</description>' --replace 'description="$1"' --no-filename (extract and reformat the description)
Result:
description="Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua"