Regex SeD与Postfix日志
我正在编写一个脚本,从后缀日志中提取消息id,但是日志可以包含不同的日期戳,因此字段的数量可能不同,因此消息id字段awk“{print$6}”并不总是有效,我听说使用SED时速度也更快 因此,我需要从日志的每一行获取的唯一数据是和ID: 7B01038BFDBRegex SeD与Postfix日志,regex,sed,postfix,Regex,Sed,Postfix,我正在编写一个脚本,从后缀日志中提取消息id,但是日志可以包含不同的日期戳,因此字段的数量可能不同,因此消息id字段awk“{print$6}”并不总是有效,我听说使用SED时速度也更快 因此,我需要从日志的每一行获取的唯一数据是和ID: 7B01038BFDB cat mail.log | grep 'postfix' | grep -i email@address.com | sed -n 's/.*[0-9A-Z]{11}:*/\1/p' 但是这个regexp不起作用 您需要将sed模式
cat mail.log | grep 'postfix' | grep -i email@address.com | sed -n 's/.*[0-9A-Z]{11}:*/\1/p'
但是这个regexp不起作用 您需要将
sed
模式调整为
sed 's/.*\([0-9A-Z]\{11\}\):.*/\1/'
^^ ^^ ^^^^ ^^
要使用反向引用,您需要使用
\(…\)
定义一个捕获组,并且范围量词也必须在BRE POSIX中转义。此外,模式应以*
结尾,以匹配行的其余部分 您应该发布日志文件的片段Hello,尽管它可以工作,但它只会在没有id的地方打印出垃圾行,例如:echo“aaaaaaaa”| sed的/*\([0-9A-Z]\{11\}):.*/\1/'will result->aaaaaaaa.
如果ID不存在,我不想要任何结果。@munin24然后grep
包含模式的行,例如,带有grep'[0-9A-Z]\{11\}:'
。