从字符串解析满足某些条件的组

时间:2019-06-06 09:54:28

标签: regex unix grep

我正在尝试解析出符合特定条件的数字组。

文本示例

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 个答案:

答案 0 :(得分:1)

您试图仅在字符串的开头与^锚点进行匹配。此外,您不会提取匹配项,而只会获得与模式匹配的行。

使用

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

仅靠-o,它将为您提取匹配的子字符串,并且模式仅匹配

  • \b-单词边界
  • [12]-12
  • [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