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(複数行)でどのように印刷しますか?

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 に答える