【发布时间】:2014-01-03 06:51:21
【问题描述】:
试图在 exim 主日志中查找垃圾邮件发送者。 Mainlog 的邮件 ID 和主题如下所示。
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 而不会影响其符号。
提前致谢。
【问题讨论】:
-
谢谢...这对我有用... awk -F 'S==' -v k1=this '{gsub("[^A-Za-z0-9]", "", $2); if ($2 ~ k1) 打印 $1}'
-
gsub() 需要一个 RE 作为它的第一个参数,因此您应该使用 RE 分隔符 (
/) 而不是字符串分隔符 ("),除非您有充分的理由需要字符串分隔符,例如您正在将显式字符串与变量连接起来。另外,使用[^[:alnum:]],不要硬编码[^A-Za-z0-9]。最后,编写条件+操作的 awk 式方法不是使用if语句。所以,这个脚本应该写成'{gsub(/[^[:alnum:]]/, "", $2)} $2 ~ k1{print $1}'。