Acho que sua solução é perfeitamente adequada. Você pode otimizá-lo um pouco, substituindo os últimos 2 seds com apenas um:
sed -i '$d' uca.xml
Afinal, você acabou de colocar a linha extra lá, então você sabe o que está removendo.
Se você está procurando soluções alternativas, você pode usar sed para obter o número da linha da correspondência de padrões e, em seguida, usar -1 para fazer a leitura:
if lno=$(sed -n -e '/<\/actions>/=' uca.xml)
then let lno=lno-1
sed -i -e "$lno"'r customaction.txt' uca.xml
fi
ou se você gosta do comando ed
antigo mas que pode ser reparado, você pode fazer
ed -s uca.xml <<\!
?</actions>
-1r customaction.txt
w
q
!