regex - 在模式匹配之间提取值
问题描述
我正在尝试提取文本文件中模式匹配之间的任何数值。
解析的日志文件文本
> 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/'
解决方案
您可以使用
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
演示。
推荐阅读
- java - IntelliJ + Maven Shade:发生 JNI 错误,请检查您的安装并重试
- bazel - 我可以依赖与模式匹配的所有 Bazel 目标,而不单独列出它们吗?
- sql - 平均时间戳数据在 postgres 中给出错误
- javascript - 在哪种情况下我们使用静态路由器或 BrowserRouter 或 HashRouter,为什么?
- mongodb - 每次执行查询时,聚合 $graphLookup 以不同的顺序检索结果?
- blogger - 可视化 Blogger 的数据
- openstack - Centos7.8安装openstack mitaka版本,控制节点安装镜像服务glance,镜像包含问题
- reactjs - React-connected-router 无法显示来自基本名称的图像
- c# - Unity3d 中还有其他方法可以访问设备摄像头吗?
- node.js - 在heroku中构建和部署后清空反应应用程序