pattern regex para regra de reescrita do apache

1

Eu tenho o seguinte padrão em alguns milhares de linhas. Eu gostaria de usar o regex para converter para o que eu quero

RewriteRule ^/omg/deadly-venom/?$ http://www.example.com/omg/deadly-venom [L,NC,R=301]
RewriteRule ^/buzz/get-on-it/?$ http://www.example.com/buzz/get-on-it/ [L,NC,R=301]

e outros assim por alguns milhares de linhas

Então basicamente eu quero ter isso

RewriteRule ^/omg/(deadly-venom)/?$ http://www.example.com/omg/$1 [L,NC,R=301]
RewriteRule ^/buzz/(get-on-it)/?$ http://www.example.com/buzz/$1 [L,NC,R=301]

Como faço para isso? Eu uso o editor de texto sublime, mas também posso usar sed ou awk no terminal.

ATUALIZADO: o último / não deve resultar em barra dupla antes do $1 gostar desse //$1 , mas ainda deve ser /$1 . Veja o antes e o depois de acima e veja as linhas com o término / e o sem

    
por uberrebu 11.03.2016 / 21:45

1 resposta

1

Eu faria assim:

sed -E 's|(.*/)([^/]*)(/\?\$.*)/{,1}|()$1|' infile

O segundo grupo captura a string / padrão que tem que ser colocada em (...) , o terceiro grupo captura tudo o que segue até a mesma string (backreferenced com no LHS) que pode ter uma barra final. Então, basicamente, isso substitui {0 or 1 slash} por ()$1 .
Se o seu sed não suportar regex estendido por meio de -E :

sed 's|\(.*/\)\([^/]*\)\(/?\$.*\)/\{,1\}|()$1|' infile
    
por 11.03.2016 / 23:46