Как сказал другой автор, sed, возможно, не лучший инструмент для этой работы. Возможно, вы захотите использовать что-то, созданное для разбора XML, или даже простой язык сценариев, такой как perl.
Проблема с вашей попыткой в том, что вы неправильно анализируете строку.
cat test_file
хорошо - распечатывает содержимое файла на стандартный вывод.
grep -i "Tag2"
в порядке - он печатает только строки с "Tag2" в них. Это может быть не совсем то, что вы хотите. Имейте в виду, что он напечатает всю строку , а не только часть , поэтому вам все равно придется искать эту часть позже.
sed 's/<[^>]*[>]//g'
не то, что вам нужно - он просто удаляет теги, включая и .
Вы можете попробовать что-то вроде:
cat tmp.tmp | grep -i tag2 | sed 's/.*<Tag2>\(.*\)<\/Tag2>.*/\1/'
Это даст
working
но он будет работать только для одной пары тегов.