尝试在exim主日志中找到垃圾邮件发送者。 Mainlog有邮件ID和Subjects,如下所示。
username1@example.com S==thi#s i $s @a Su~bJec%t
username2@example2.com S==thi#s i ^s an*ot+her Su~bj)ec%t
我要做的是采取主题,删除所有符号,空格使用sed和grep关键字。如果满意,则打印邮件ID。
我成功删除了所有符号,空格和grep关键字,但问题是来自邮件ID(@和。)的符号也被删除。
所以我的问题是如何仅将sed
和grep
应用于主题S==thi#s i ^s an*ot+her Su~bj)ec%t
,以及如果满足打印邮件ID而不影响其符号。
提前谢谢。
答案 0 :(得分:1)
sed
如果可能的话,这会很棘手。如果您对awk
感到满意:
awk -F' S==' -v k1=this '{gsub("[][()#$@~% ]", "", $2); if ($2 ~ k1) print $1}'
如果你想删除所有非字母数字字符,那么最好像这样写:
awk -F' S==' -v k1=this '{gsub("[^[:alnum:]]", "", $2); if ($2 ~ k1) print $1}'
如果您的awk
版本不支持[:alnum:]
,那么您可以这样写:
awk -F' S==' -v k1=this '{gsub("[^a-zA-Z0-9]", "", $2); if ($2 ~ k1) print $1}'
说明:
S==
作为字段分隔符来分割邮件ID和主题部分k1
变量中传入关键字“this”。您可以使用具有相同格式的更多-v
参数的任何其他关键字或多个关键字,例如-v k2=something
gsub
k1
中的关键字匹配,则打印第一个字段(=邮件ID)我希望这会有所帮助。
答案 1 :(得分:0)
之前:你的grep / sed(可能在你的sed治疗中,但在你的行动之前)
sed 's/@/(at)/1
: dot
s/^\([^ ]*\)\.\([^ ]*\) /\1(dot)\2 /
t dot'
在你的grep sed之后(可能是你的sed治疗,但是你的行动已经完成)
sed 's/(dot)/./g;s/(at)/@/g'
假设您的主题中没有(dot)
和(at)
。几乎可以使用任何其他模式,例如#at#
或§1§
或:a:
(只是不使用像+.{[$^
这样的specal sed char