More sed
Aug 16, 2007
So, if you come from the world of Perl, like I do, you’re probably very familiar with the usage of regular expressions to match (m/(foo)bar(baz)/) and replace (s/foo(bar)/baz$1/) strings. sed acts upon lines and often you want to delete a range of lines. For the following regex, I had a document something like this:
<Recording modeType="foo">
<foo>bar</foo>
<baz>qux</baz>
</Recording>
<Recording modeType="fp">
<foo>bar</foo>
<baz>qux</baz>
</Recording>
<Recording modeType="bar">
<foo>bar</foo>
<baz>qux</baz>
</Recording>
…and I wanted to remove any of the blocks of modeType ‘fp’. To do so, I tell sed to find lines with the modeType of 'fp’, and a subsequent line with a closing 'Recording’ tag and then ’d'elete them all:
sed -i -e '/modeType="fp"/,/Recording>/d'
Simple. The more you get to know it, the more awesome sed is.