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现有的答案;):)