На всякий случай perl - вариант для вас:
#!/usr/bin/env perl
# saved lines to print out
my @out = ();
# should we save lines?
my $saving = 0;
while (<>) {
if (/abc/) {
if ($saving) {
# this is the second /abc/, so dump what we were saving and start over
@out = ($_);
} else {
# this is the first /abc/, so save it and start saving lines
push @out, $_;
$saving = 1;
}
} elsif (/mno/) {
if ($saving) {
# print what we've saved, plus this /mno/ ending line, then reset
print @out, $_;
@out=();
$saving=0;
}
} else {
# otherwise, save lines if we should be
push @out, $_ if $saving;
}
}
Вы можете использовать:
var2=$(echo $var1 | grep -o [0-9][0-9]*\.[0-9][0-9]*%)
здесь grep -o [0-9][0-9]*\.[0-9][0-9]*%
будет соответствовать числам с плавающей запятой, имеющим знак %
в конце.
В вашем случае будет напечатано
0.0%
20.0%
Если вы хотите получить только первое совпадение, используйте:
var2=$(echo $var1 | grep -o [0-9][0-9]*\.[0-9][0-9]*% | head -n1)