, awk , <foo>.*</foo>, </foo> </foo>. , , , x[^xy]*y, x y - / , , ? : :
$ cat nonGreedy.awk
{
$0 = encode($0)
while ( match($0,/({[^{}]*})/) ) {
print decode(substr($0,RSTART,RLENGTH))
$0 = substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH)
}
}
function encode(str) {
gsub(/@/,"@A",str)
gsub(/{/,"@B",str); gsub(/}/,"@C",str)
gsub(/<foo>/,"{",str); gsub(/<\/foo>/,"}",str)
return str
}
function decode(str) {
gsub(/}/,"</foo>",str); gsub(/{/,"<foo>",str)
gsub(/@C/,"}",str); gsub(/@B/,"{",str)
gsub(/@A/,"@",str)
return str
}
$ awk -f nonGreedy.awk file
<foo> .. a<2 .. </foo>
<foo> .. 1 .. </foo>
<foo> .. 4 .. </foo>
<foo> .. @{<>}@ .. </foo>
<foo> .. 5 .. </foo>
, JUST IN THE START/END STRINGS ( , , , ), @ A . @A @, @B @, - .
2 , /, { } @ -prefixed, @B @C, @B {, @C }, { }.
, , , , <foo> , , { </foo> }, {[^{}]*} <foo>.*</foo>.
, , , ( , , ), { <foo> @B {, @A @ .., .
awk. / RE, while(index(substr())) gsub() .
, gawk , 2 , , script :
BEGIN { FPAT="{[^{}]*}" }
{
$0 = encode($0)
for (i=1; i<=NF; i++) {
print decode($i)
}
}
, / , , , .
, , . fooobar.com/questions/1660332/....