2017-06-13 51 views
0

我正在写一个脚本来从后缀日志中提取邮件ID,但日志可以包含不同日期戳,所以字段数可以不同,因此awk'{print $ 6}'是邮件ID字段不会一直工作,我听说SED的速度也更快。SeD vs Postfix日志

所以我从日志的每一行唯一需要的数据和ID:

7B01038BFDB

cat mail.log | grep 'postfix' | grep -i [email protected] | sed -n 's/.*[0-9A-Z]{11}:*/\1/p' 

但是这个正则表达式不起作用。

+0

你应该发布你的日志文件的片段 – RomanPerekhrest

回答

1

您需要将sed模式调整到

sed 's/.*\([0-9A-Z]\{11\}\):.*/\1/' 
      ^^  ^^ ^^^^ ^^ 

要使用反向引用,您需要定义一个捕获组\(...\)和范围量词也必须在BRE POSIX进行转义。此外,该模式应以.*结尾以匹配其余行。

+0

你好,虽然它的工作,它只会打印出垃圾邮件行,其中id不存在,例如:'echo“aaaaaaaa”| sed's /.* \([0-9A-Z] \ {11 \} \):。*/\ 1 /'会导致 - > aaaaaaaa.'如果ID不存在,我不想要任何结果。 – munin24

+0

@ munin24然后'grep'包含模式的行,比如说'grep'[0-9A-Z] \ {11 \}:''。 –