4

输入文件(测试):

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 ) 中打印正则表达式组?

4

1 回答 1

2

如果你像这样使用 sed:

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

然后它将以不同的行打印:

123456
789
0123

但这就是您要打印的内容吗?或者你想在hrefs中打印文本?

更新 1:在格式良好的<a</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
于 2011-05-12T03:41:01.703 回答