«нужно получить» - в зависимости от контекста может показаться, что «получить» означает «удалить». Тем не менее, я обычно интерпретирую «получить», чтобы означать «получить» или «сохранить». Ваша команда sed
говорит: «Удалить все». Как бы выглядел желаемый результат?
Предполагая, что вы имеете в виду «получить» или «сохранить», попробуйте следующее:
sed -n 's|.*{/moslate}\([^{]*\){moslate}.*|\1|p' a.txt
, который будет извлекать "otra" или что-либо еще в положении, которое "otra" занимает в этой строке (то есть между двумя наборами тегов "moslate").
Результирующий вывод:
otra
Если вы хотите удалить «otra»:
sed 's/otra//' a.txt
Выход:
{moslate}alho{/moslate}{moslate}a{/moslate}
Если вы хотите удалить все, что находится в позиции, которую «otra» занимает в этой строке (то есть между двумя наборами «moslate»):
sed -n 's|\(.*{/moslate}\)[^{]*\({moslate}.*\)|\1\2|p' a.txt
Выход:
{moslate}alho{/moslate}{moslate}a{/moslate}