Извлечь значения между сопоставлением с образцом - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь извлечь любые числовые значения между совпадением шаблонов в текстовом файле.

Текст файла синтаксического анализа

> GET /pub/data/nccf/com/hiresw/prod/hiresw.20180921/hiresw.t00z.nmmb_2p5km.f25.conus.grib2

Я хочу получить25 из f25 в nmmb_2p5km.f 25 .conus.grib2

код попытки

sed -e 's/nmmb_2p5km\(.*\)grib2/\1/'

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Использование perl one-liner

> export log="GET /pub/data/nccf/com/hiresw/prod/hiresw.20180921/hiresw.t00z.nmmb_2p5km.f25.conus.grib2"
> perl -ne ' BEGIN { $x=$ENV{log};$x=~s/(.+?)(\d+)\.conus\.(.+)/\2/g; print "$x\n"; exit } '
25
>
0 голосов
/ 21 сентября 2018

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

log="GET /pub/data/nccf/com/hiresw/prod/hiresw.20180921/hiresw.t00z.nmmb_2p5km.f25.conus.grib2"
sed 's/.*nmmb_2p5km[^0-9]*\([0-9]*\)[^0-9]*grib2.*/\1/' <<< "$log"

Шаблон .*nmmb_2p5km[^0-9]*\([0-9]*\)[^0-9]*grib2.* соответствует

  • .* - любые 0+ символов
  • nmmb_2p5km - литералподстрока
  • [^0-9]* - 0+ нецифровых символов
  • \([0-9]*\) - Группа захвата 1 (позднее обозначается \1 из шаблона замены): 0+ цифр
  • [^0-9]* - 0+ нецифровых символов
  • grib2.* - grib2 и любые 0+ символов.

В качестве альтернативы вы можете использовать grep сшаблон PCRE, такой как

grep -Po 'nmmb_2p5km\D*\K\d+' <<< "$log"

Подробности

  • nmmb_2p5km - буквальная подстрока
  • \D* - 0+ несимвольные символы
  • \K - Оратор сброса совпадений, отбрасывающий весь найденный текст
  • \d+ - 1+ цифр.

См. онлайнsed и grep демо .

...