Разбор групп, отвечающих определенным условиям из строки - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь разобрать группы чисел, которые соответствуют определенным критериям.

Образец текста

KBOS 052354Z 19012KT 10SM FEW075 BKN110 OVC200 24/14 A2975 RMK AO2 SLP074 T02390144 10289 20239 55002

Нужные группы для анализа

10289 20239

Код попытки

echo "KBOS 052354Z 19012KT 10SM FEW075 BKN110 OVC200 24/14 A2975 RMK AO2 SLP074 T02390144 10289 20239 55002" | grep -E '^1[0-9][0-9][0-9][0-9]'
echo "KBOS 052354Z 19012KT 10SM FEW075 BKN110 OVC200 24/14 A2975 RMK AO2 SLP074 T02390144 10289 20239 55002" | grep -E '^2[0-9][0-9][0-9][0-9]'

Что я делаю не так?

1 Ответ

1 голос
/ 06 июня 2019

Вы пытаетесь сопоставить только в начале строки с ^ привязкой в ​​начале.Кроме того, вы не извлекаете совпадения, вы получаете только строки, совпадающие с шаблоном.

Использование

grep -oE '\b[12][0-9]{4}\b'

Он выберет вам совпадающие подстроки только благодаря -o, и шаблон будеттолько совпадение

  • \b - граница слова
  • [12] - 1 или 2
  • [0-9]{4} - любые четыре цифры
  • \b - граница слова.

См. online grep demo :

s="KBOS 052354Z 19012KT 10SM FEW075 BKN110 OVC200 24/14 A2975 RMK AO2 SLP074 T02390144 10289 20239 55002"
grep -oE '\b[12][0-9]{4}\b' <<< "$s"
# Or grep -oE '\<[12][0-9]{4}\>' <<< "$s"

Вывод:

10289
20239
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...