Domanda

File di input (prova):

123456<a id="id1" name="name1" href="link1">This is link1</a>789<a id="id2"
href="link2">This is link2</a>0123

Uscita desiderata:

link1
link2

Cosa ho fatto:

$ sed -e '/<a/{:begin;/<\/a>/!{N;b begin};s/<a\([^<]*\)<\/a>/QQ/;/<a/b begin}' test
123456QQ789QQ0123

Domanda:Come si stampano i gruppi regex in sed (multilinea)?

È stato utile?

Soluzione

Se usi sed in questo modo:

sed -e '/<a/{:begin;/<\/a>/!{N;b begin};s/<a\([^<]*\)<\/a>/\n/;/<a/b begin}'

quindi verrà stampato in diverse righe:

123456
789
0123

Ma è questo ciò che stai cercando di stampare?Oppure vuoi stampare il testo in hrefs?

Aggiornamento 1:Per ottenere href tra ben formati <a E </a>

sed -r '$!N; s~\n~~; s~(<a )~\n\1~ig; s~[^<]*<a[^>]*href\s*=\s*"([^"]*)"[^\n]*~\1\n~ig' test

produzione

link1
link2

Aggiornamento 2:Superare l'output utilizzando la funzionalità regex di bash

regex='href="([^"]*)"'
while read line; do
   [[ $line =~ $regex ]] || continue
   echo ${BASH_REMATCH[1]}
done < test

produzione

link1
link2
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top