awk или grep для получения определенной строки в оболочке

На всякий случай 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;
  }
}
0
05.04.2019, 13:27
1 ответ

Вы можете использовать:

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)
0
28.01.2020, 03:51

Теги

Похожие вопросы