Bash正则表达式脚本不匹配

时间:2017-03-27 13:14:19

标签: bash shell

我创建了这个批处理脚本,它解析文件并显示我的值,如果找到的话:

#!/bin/bash
myFile="my-services.log"
while read p; do
    re="(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3}).*:(\d*)"
    if [[ $p =~ $re ]]; then 
        echo ${BASH_REMATCH[0]} 
        echo ${BASH_REMATCH[1]}
        echo ${BASH_REMATCH[2]} 
    fi
done <$myFile

我的日志文件包含这样的内容

  

2017-03-24 07:51:43268我的日志ID:469565

我的脚本运行良好,但即使匹配我的正则表达式的数据也无法匹配任何内容。 我用我的文件编辑器检查了我的正则表达式,它发现了事件,所以很奇怪。

请注意,Regular Expression in Bash ScriptMultiple matches in a string using regex in bash

给了我很大的启发

1 个答案:

答案 0 :(得分:1)

Bash不支持\d\s

[STEP 100] $ echo $BASH_VERSION
4.4.12(3)-release
[STEP 101] $ d4='[[:digit:]]{4}'
[STEP 102] $ d2='[[:digit:]]{2}'
[STEP 103] $ d3='[[:digit:]]{3}'
[STEP 104] $ ds='[[:digit:]]+'
[STEP 105] $ re="^($d4-$d2-$d2 $d2:$d2:$d2,$d3) .*:($ds)\$"
[STEP 106] $ str='2017-03-24 07:51:43,368 my log id :469565'
[STEP 107] $ [[ $str =~ $re ]]
[STEP 108] $ echo $?
0
[STEP 109] $ echo ${BASH_REMATCH[1]}
2017-03-24 07:51:43,368
[STEP 110] $ echo ${BASH_REMATCH[2]}
469565
[STEP 111] $