Sed – 如何在多行打印正则expression式组?

input文件(testing):

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

期望的输出:

 link1 link2 

我做了什么:

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

问题:如何在sed( multiline )中打印正则expression式组?

如果你像这样使用sed:

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

那么它将打印在不同的行:

 123456 789 0123 

但是,这是你想要打印? 或者你想在hrefs中打印文本?

更新1:获得良好形式的<a href=""> </a>

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

产量

 link1 link2 

更新2:使用bash正则表达式获取以上输出

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

产量

 link1 link2