Нужна помощь, чтобы заставить Regex работать правильно - PullRequest
0 голосов
/ 03 марта 2020

Использование регулярного выражения для преобразования метрического отчета в читаемый формат в bash и не может заставить одно выражение работать правильно. Вот выражение:

egrep -o '\s(SKC|FEW|SCT|BKN|OVC)[0-9]{3}\s' metar.txt | cut -c2-8

Вот текстовый файл, который читается из:

METAR KBWI 211554Z 20012G15KT 10SM +RA TH FEW110 SCT140 BKN180 SKC300 OVC500 06 

Я собираюсь на FEW110, SCT140, BKN180, SKC300 и OVC500, но он только подхватывает FEW, BKN и OV C, но не SCT или SK C. Я пытался написать выражение по-разному, но ни один из них не сработал и был бы признателен за помощь. В настоящее время это вывод, который я получаю

FEW110
BKN180
OVC500

Ответы [ 2 ]

1 голос
/ 03 марта 2020

\s в конце захватывает начальный пробел следующего элемента, поэтому его необходимо пропустить, см. https://regex101.com/r/ZGAeTW/1 для визуализации проблемы.

Измените регулярное выражение на:

\b(SKC|FEW|SCT|BKN|OVC)[0-9]{3}\b
0 голосов
/ 04 марта 2020

Вот awk для этого, который заменяет egrep и cut:

$ awk '{for (i=1;i<=NF;i++) if($i ~ /^(SKC|FEW|SCT|BKN|OVC)[0-9]{3}$/) print $i}' metar.txt
FEW110
SCT140
BKN180
SKC300
OVC500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...