Bash regex - nie działa jak powinno

0

Witam!

Nie mogę zmusić skryptu do działania. Problem jest z "?" - zapomniałem jak się to nazywało.

#!/bin/bash

data="
<tag>
  <tag1 class=1>data1</tag1>
  <tag2 class=2>data2</tag2>
  <tag1 class=3>data3</tag1>
</tag>
";

if [[ "$data" =~ \<tag1[^\>]*\>(.*?)\<\/tag1\> ]]
then
        echo 0 $BASH_REMATCH
        echo 1 ${BASH_REMATCH[1]}
fi

Wynik:

0 <tag1 class=1>data1</tag1> <tag2 class=2>data2</tag2> <tag1 class=3>data3</tag1>
1 data1</tag1> <tag2 class=2>data2</tag2> <tag1 class=3>data3

Znów tutaj jest ok:
https://regex101.com/r/gB3jQ2/1

Jak to zrobić poprawnie w bash'u?

0

Powinno być:

0 <tag1 class=1>data1</tag1>
1 data1
0

Nazywa sie to "non greedy match" i wyglada na to ze bash tego nie wspiera. Pozostaje uzycie grep -P albo perl -ne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1