我有一个 SMTP 日志,其记录格式如下:
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,protocol,SMTP ,745663746,STATUS-COMPLETE ,VALID
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,date,Wed, 12 Mar 2014 00:08:44 +0100 ,745663746,STATUS-COMPLETE ,VALID
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,from,[email protected] ,745663746,STATUS-COMPLETE ,VALID
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,to,[email protected],745663746,STATUS-COMPLETE ,VALID
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,subject,12 skills every lawyer must muster ,745663746,STATUS-COMPLETE ,VALID
6,222.3.4.5,3040,100.2.3.4,25,UNKNOWN,0,1,……,9337bc-929a-34c0-29a8-b3a89c834b29 ,received,from [222.3.4.5] by uwl-vsd-v003.client.com with ESMTP (client SMTP Relay); Wed, 2 Mar 2013 00:06:14 +0100 from MDN-RGE-V002.client.com ([333.4.5.6]) by mdn-cbd-v001.fal.client.com (PGP Universal service); Wed, 12 Mar 2014 00:05:19 +0100 from mail-ea5-p203.google.com (HELO mail-ea5-p203.google.com) (444.5.6.7) by server-2.tower-92.example.com with RC4-SHA encrypted SMTP; 11 Mar 2014 23:06:11 -0000 from mail-ea5-p203.google.com with SMTP id I6ysd382736td.92 for <john@client>; Tues, 11 Mar 2014 16:06:10 -0700 (PDT) from nicsender ([555.6.7.8]) by mx.google.com with ESMTPSA id 87sm453982eeh.12.2014.03.11.16.06.08 for <[email protected]> (version=TLSv1cipher=LDSE-RSA-UED253-SHAbits=128/128); Tues, 11 Mar 2014 16:06:09 -0700 (PDT),745663746,STATUS-COMPLETE ,VALID
我正在尝试编写一个 bash 脚本,以将日志文件中电子邮件地址中的每个不同域替换为某个随机字符串的方式对电子邮件地址进行匿名化,例如 [电子邮件受保护]被替换为[电子邮件受保护] [电子邮件受保护]被替换为[电子邮件受保护] [电子邮件受保护]被替换为[电子邮件受保护] 该脚本会将域查找保存在单独的文件中。
有人可以给我一些关于如何做到这一点的指示吗?
答案1
我想到的一个想法是获取日志文件的 @domain.com 部分,然后简单地使用md5sum
或sha1sum
用 MD5 或 SHA1 字符串来屏蔽原始值。这演示了该机制。
$ echo -n abc.com | md5sum
929ba26f492f86d4a9d66a080849865a -
$ echo -n 123.com | md5sum
cbff36039c3d0212b3e34c23dcde1456 -
相同的机制也可以应用于用户名,即@.
如果您确实只想要 0-9 数字,可以想到的另一种方法是使用上述方法,然后运行输出tr
以将所有内容转换为 0-9 数字。
$ echo -n abc.com | md5sum | tr -dc '0-9'
92926492864966080849865
$ echo -n 123.com | md5sum | tr -dc '0-9'
3603930212334231456
随机字符串
如果您想生成 0-9 数字的随机字符串,您可以使用本文中描述的几种方法,标题为:从命令行生成随机密码的 10 种方法。
例子
使用 tr + head$ < /dev/urandom tr -dc 0-9 | head -c${1:-10};echo;
1294624186
$ < /dev/urandom tr -dc 0-9 | head -c${1:-16};echo;
9716679462199400
使用 tr + fold
$ tr -cd '[:digit:]' < /dev/urandom | fold -w10 | head -n1
6503251969
$ tr -cd '[:digit:]' < /dev/urandom | fold -w16 | head -n1
6629563424656680