使用sed捕获重复组

使用sed捕获重复组,sed,Sed,我希望使用sed捕获重复组,以便解析日志行 echo "14:14:52.449 [thread] INFO LOGGER - SYMBOL: FIELD1[1.0] FIELD2[2] FIELD3[141452 (2016-11-24 14:14:52.000)] FIELD4[4]" | sed -E "s/(\d\d:\d\d:\d\d.\d\d\d )(.*?\-)( .*?\:)(.*)( FIELD3\[.*?\]).*/\\1\\3\\5/" 我希望只捕获以下字段 14:14

我希望使用sed捕获重复组,以便解析日志行

echo "14:14:52.449 [thread] INFO  LOGGER - SYMBOL: FIELD1[1.0] FIELD2[2] FIELD3[141452 (2016-11-24 14:14:52.000)] FIELD4[4]" | sed -E "s/(\d\d:\d\d:\d\d.\d\d\d )(.*?\-)( .*?\:)(.*)( FIELD3\[.*?\]).*/\\1\\3\\5/"
我希望只捕获以下字段

14:14:52.449 SYMBOL FIELD3[141452 (2016-11-24 14:14:52.000)]
但是我把整条线都弄回来了。非常感谢您的帮助

14:14:52.449 [thread] INFO  LOGGER - SYMBOL: FIELD1[1.0] FIELD2[2] FIELD3[141452 (2016-11-24 14:14:52.000)] FIELD4[4]
对于sed:

sed -E "s/^(([0-9]{2}:){2}[0-9]{2}\.[0-9]{3}).*( [^:]*):.*( FIELD3\[[^]]*\]).*/\1\3\4/"

sed不支持非贪婪<代码>*?不起作用<代码>\d也无效。。需要使用
[0-9]
您可以改用
perl
或找到一种避免非贪婪正则表达式的方法…预期的输出有
时间
,它不会出现在输入中。。。另外,您能用文字解释一下提取字段的依据吗?
perl-pe的/(\d\d:\d\d\d\d)(.*?\)(.*?:)(.*)(FIELD3\[.\])./$1$3$5/'
将直接从您的
sed
尝试
perl
版本翻译过来。
TIME
字符串在原始字符串中并不完美。谢谢@Sundeep