Você pode usar o GNU grep
(se construído com suporte a PCRE) para isso:
$ grep -Po '(?<=a href=")[^"]*' file
a.htm
b.htm
c.htm
É um look-behind (o que vem depois de a href="
?) e leva tudo até as próximas aspas duplas.
Eu quero analisar uma string para subpastas específicas e gerar aquelas - uma subversão por linha - em um arquivo.
Essencialmente eu gostaria de extrair o valor de cada atributo href:
$ cat Fin
<a href="a.htm">A</a>X<a href="b.htm">B</a>Y<a href="c.htm">C</a>
$ echo Fin | [grep, sed, awk, ...?] > Fout
$ cat Fout
a.htm
b.htm
c.htm
Eu tentei algumas coisas com ferramentas nomeadas, mas as coisas não funcionam ou são muito complicadas. Eu gostaria de realizar essa transformação dentro de uma única linha de comando, concatenando o mínimo possível de comandos com a tubulação.
sed 's%</a>%\n%g' Fin | sed 's%.*"\([a-z]\.htm\).*%%' > Fout
a.htm
b.htm
c.htm
Certamente há um caminho mais curto e elegante.