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
.