#!/usr/bin/sed -f :loop # Remove leading uninteresting stuff s/^[^[]*// # If we didn't hit a math start yet, get next line /^\[\[/! d # We now have a string starting with [[ # Until we have a starting and an ending point, get more lines :get /\[\[.*\]\]/ bgot N bget :got # We now have a string containing at least one string we want # Preserve in hold space h # Remove everything not inside the pattern and print it s/^\(\[\[[^]]*\]\]\).*/\1/p # get text back from hold space g # Remove just-printed string s/^\[\[[^]]*\]\]// bloop