Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex SeD与Postfix日志_Regex_Sed_Postfix - Fatal编程技术网

Regex SeD与Postfix日志

Regex 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模式

我正在编写一个脚本,从后缀日志中提取消息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
模式调整为

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\}:'