要求是屏蔽日志文件中的一些敏感数据,下面的代码在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
,并且无权使用perl
或sed
,因为它受到管理团队的限制。
预期输出:
****and **** and ****and ****
如果内容在文件中,解决方案也应该有效,例如
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
答案 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
,那么您可能还需要使用我上面建议的括号表达式。