使用awk掩盖电子邮件地址,phonenumber,ssn(模式)

时间:2018-01-04 13:15:29

标签: bash shell awk grep cat

要求是屏蔽日志文件中的一些敏感数据,下面的代码在awk版本为 4.0.2 时按预期工作。

我将grep日志文件,然后必须使用下面awk代码段中提到的模式屏蔽某些数据,然后返回结果。

echo "123-123-432-123-999-889 and 123456 and 1234-1234-4321-1234 and xyz@abc.com" | awk ' gsub (/[0-9]{6,}|([0-9]{3,}.){3,}|\w{2,}@\w{2,}.\w{2,}/, "****") 1'

同样不适用于awk版本 3.1.7 ,即生产服务器版本。

我只能使用grep, cat, awk,并且无权使用perlsed ,因为它受到管理团队的限制。

预期输出:

****and **** and ****and ****

如果内容在文件中,解决方案也应该有效,例如

sample.log

123-123-432-123-999-889
and 
123456
and
1234-1234-4321-1234 
and xyz@abc.com

命令:

 cat sample.log  | awk ' gsub (/[0-9]{6,}|([0-9]{3,}.){3,}|\w{2,}@\w{2,}.\w{2,}/, "****") 1'

请帮助我使用awk,它可以在 3.1.7 版本的awk

中使用

1 个答案:

答案 0 :(得分:2)

使用以下命令激活RE间隔:

awk --re-interval '...'

您可能还需要将\w替换为[[:alnum:]_]

你遇到的问题是你在RE间隔之前使用了一个非常古老的gawk版本(例如{1,3}),默认情况下是这样的,所以在每个{的旧gawk中而}只是一个文字字符,用于向后兼容20世纪80年代的awks(旧的,破坏的awk和nawk),所以你需要明确告诉gawk将{1,3}解释为RE Interval而不是文字字符串5个字符。

Idk如果支持或不支持\w,那么您可能还需要使用我上面建议的括号表达式。