Regex 提取模式匹配之间的值

Regex 提取模式匹配之间的值,regex,parsing,unix,sed,Regex,Parsing,Unix,Sed,我试图提取文本文件中模式匹配之间的任何数值 解析的日志文件文本 > GET /pub/data/nccf/com/hiresw/prod/hiresw.20180921/hiresw.t00z.nmmb_2p5km.f25.conus.grib2 我想把25从f25拉到nmmb_2p5km.f25.conus.grib2中 尝试的代码 sed -e 's/nmmb_2p5km\(.*\)grib2/\1/' 你可以用 log="GET /pub/data/nccf/com/hiresw

我试图提取文本文件中模式匹配之间的任何数值

解析的日志文件文本

> GET /pub/data/nccf/com/hiresw/prod/hiresw.20180921/hiresw.t00z.nmmb_2p5km.f25.conus.grib2
我想把
25
f25
拉到nmmb_2p5km.f25.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
    -文字子字符串
  • \D*
    -0+非数字字符
  • \K
    -匹配重置oeprator放弃所有到目前为止匹配的文本
  • \d+
    -1+位
请参阅使用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
>

每。影响。谢谢你非常彻底和完整的回答!
> 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
>