Você pode fazer isso usando grep
para encontrar o texto entre as tags e, em seguida, sed
para remover as tags:
$ grep -oP '<category.+?>.*?</category>' file.txt | sed 's/<.*>\(.*\)<.*>//'
myotonic dystrophy
Myotonic dystrophy
DM
DM
DM
Explicação
-
grep -oP
:-P
ativa PCRE paragrep
e-o
faz com que seja impressa apenas a string correspondente. -
'<category.+?>.*?</category>'
: diz aogrep
para pesquisar tudo entre abrir e fecharcategory
tags. -
sed 's/<.*>\(.*\)<.*>//'
: A saída dogrep
acima é canalizada parased
, o que simplesmente exclui as tags, substituindo-as por seu conteúdo (aquiporque parênteses foram usados para capturá-las).