Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash正则表达式脚本不匹配_Bash_Shell - Fatal编程技术网

Bash正则表达式脚本不匹配

Bash正则表达式脚本不匹配,bash,shell,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]}

我制作了此批处理脚本,该脚本正在分析文件并显示我的值(如果找到):

#!/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
#/bin/bash
myFile=“my services.log”
读p;做
re=“(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\d{3})。*:(\d*)
如果[[$p=~$re]];然后
echo${BASH_重新匹配[0]}
echo${BASH_重赛[1]}
echo${BASH_重赛[2]}
fi

完成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] $

你确定bash支持
\d
?wow没有想到这一点。做得很好,juste必须将所有\替换为它们的实际值,例如\d的[0-9]。非常感谢,请发布一个答案,以便我验证它(请接受whjm现有的答案;):)