我创建了这个批处理脚本,它解析文件并显示我的值,如果找到的话:
#!/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 Script和Multiple matches in a string using regex in bash
给了我很大的启发答案 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] $