perl -pi.bak -e 's#<\s*title\s*>([^<]+|<(?!\s*/))*<\s*/\s*title\s*>#New Title#i' # this will correctly parse horrid stuff like One is < two more stuff </ title> <foo>bar</foo>