Eu tenho listas de urls com domínios diferentes e quero que o nome do host seja removido com sed, awk ou algo semelhante e mantenha apenas o caminho. Não há URLs com porta ou nome de usuário@senha nele.
entrada:
http://www.example.com/
https://www.example.com/
http://example.com/blog/
https://example.com/blog/
https://www.example.co.uk/blog/
https://example.co.uk/blog/
https://sub.example.co.uk/blog/
https://www.example.com/blog/
https://www.example.com/cases/page/4/
https://www.example.com/cdn-cgi/challenge-platform/h/g/cv/result/7c9123dc38da6841
https://www.example.com/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
https://www.example.co.uk/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
https://sub.example.co.uk/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
saída deve ser:
/
/
/blog/
/blog/
/blog/
/blog/
/blog/
/blog/
/cases/page/4/
/cdn-cgi/challenge-platform/h/g/cv/result/7c9123dc38da6841
/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
/cdn-cgi/challenge-platform/h/g/scripts/jsd/7fe83wdcs/invisible.js
Espero que alguém possa me ajudar porque só consigo encontrar comandos regex. Não sei como convertê-los corretamente em um comando sed ou awk
Com
perl
:Removeria um esquema opcional (para cuidar de ambos
http://host/path
e//host/path
) seguido por//
seguido de todos os caracteres que não/
o seguinte (removeria ohost
e também ouser:password@host:8080
in ,ftp://user:password@host:8080/pub
por exemplo).Um
sed
equivalente poderia ser:Em qualquer caso, o
s/pattern/replacement/
operador de ambossed
eperl
usa expressões regulares para o padrão, as chamadas expressões regulares básicas parased
, expressões regulares perl paraperl
(que melhoram e estendem as expressões regulares estendidas que muitassed
implementações também suportam com a-E
opção atualmente).Há também um
URI
módulo paraperl
o qual você pode usar para analisar um URI em um objeto estruturado.Observe que ele descarta a string de consulta (como em
http://host/path?query
) e o fragmento (como emhttp://host/file.html#anchor
), se houver. Substitua->path
por->path_query
se desejar que a consulta, se houver, seja incluída.Isso é bastante fácil de fazer com linux coreutils:
cut -d '/' -f 3- somefilewithyoururls.txt | sed 's/^/\//'
Corte tudo após o terceiro
/
e substitua o início da linha por um/
. Não há necessidade de regexes complicados.Usando qualquer sed: