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"
grep. They are tightly related but not dups, IMO."grep"suggesting the verb "to grep", and top answers, including accepted, don't use grep.