echo '<a href="docs/2015-05-foobar/foobar.sh">foobar.sh</a>' |\
sed 's/\(.*\)href="\(.*\)\/\(.*\)"\(.*\)/href=""/'
oferece:
<a href="foobar.sh">foobar.sh</a>
Se houver algum contexto, no entanto, nunca usarei sed
, mas um analisador adequado para o HTML para encontrar a entrada <a>
e, em seguida, acessar o href
do elemento encontrado usando os métodos de acesso fornecidos pelo parser.
As partes \(.*\)
correspondem a qualquer coisa e o que elas correspondem pode ser chamado de volta com ,
, etc. Os outros caracteres (
href="
, \/
, "
) precisam ser correspondidos (e a barra escapou como também é usada para denotar o início e o fim do padrão de substituição. A correspondência é gulosa, portanto o \/
corresponde à última barra antes do segundo "
. Por não usar a parte de correspondência com que é descartado da saída, exatamente como você queria.