sed 's/\([^/]*\)\.phtml$/mydirectory\/.php/' <filename>
Vai fazer isso, se é isso que você precisa. (opcionalmente com o sinalizador -i para fazer uma substituição no local).
Para terminar, primeiro temos
s/<regexp>/<replacement>/
Que substituirá o que <regexp> corresponde a <replacement> . Em seguida, vamos ver o regexp que tivemos:
\([^/]*\)\.phtml$
Primeiro, no final, temos \.phtml$ , que procurará a string .phtml no final da linha. $ ancora o regexp ao final da linha, e há uma barra invertida na frente do ponto para escapar, porque normalmente um ponto corresponde a qualquer coisa.
Depois disso, o que nos resta é:
\([^/]*\)
Olhando no meio, temos [^/] , que irá corresponder a um caractere ( [] irá corresponder a um dos caracteres dentro dos colchetes), que pode ser qualquer coisa que não seja uma barra, porque ^ fará uma correspondência negada, então ^/ dentro de colchetes "nada além de uma barra". Após o colchete de fechamento, há um asterisco, * , o que significa que ele corresponderá a um ou mais caracteres dentro dos colchetes.
Em seguida, em torno do acima, temos \( e \) , que capturarão o que é correspondido dentro dos parênteses e permitem usá-los na seção <replacement> de s/<regexp>/<replacement>/ , para que possamos usá-los.
E, na seção <replacement> , temos:
mydirectory\/.php/
Que substituirá o rexecp correspondente pelo primeiro mydirectory/ , a barra que precisa ser substituída, pois / é usado como separador para o sed replace e, em seguida, é usado para inserir o texto que foi capturado no primeiro grupo de captura e, em seguida, adicionamos a extensão .php no final.
Tudo isso em conjunto significa que capturaremos tudo, desde o último / até .phtml , adicionar mydirectory/ após a última barra, escreveremos o texto capturado e adicionaremos a extensão .php .