Sed - 如何在多行中打印正则表达式组?

时间:2011-05-12 03:31:36

标签: regex linux sed multiline regex-group

输入文件(测试):

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

1 个答案:

答案 0 :(得分:2)

如果您使用这样的sed:

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

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

123456
789
0123

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

更新1:获取格式良好的<a</a>

之间的href
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