Bash 使用awk屏蔽电子邮件地址、电话号码、ssn(模式)
要求屏蔽日志文件中的一些敏感数据,以下代码在Bash 使用awk屏蔽电子邮件地址、电话号码、ssn(模式),bash,shell,awk,grep,cat,Bash,Shell,Awk,Grep,Cat,要求屏蔽日志文件中的一些敏感数据,以下代码在awk版本为4.0.2时按预期工作 我将greping日志文件,然后必须使用下面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
版本为4.0.2时按预期工作
我将grep
ing日志文件,然后必须使用下面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
version3.1.7中,该功能不起作用
我只能使用grep、cat、awk
,并且没有权限使用perl
或sed
,因为它受到管理团队的限制
预期输出:
****and **** and ****and ****
例如,如果内容在文件中,解决方案也应该起作用
sample.log
命令:
cat sample.log | awk ' gsub (/[0-9]{6,}|([0-9]{3,}.){3,}|\w{2,}@\w{2,}.\w{2,}/, "****") 1'
请帮助我使用awk,它可以在
awk
的3.1.7版本中使用:
awk --re-interval '...'
您可能还需要将\w
s替换为[:alnum:][uu]
你遇到的问题;在默认情况下启用重新间隔(例如,{1,3}
)之前,您使用的是非常旧的gawk版本,因此在旧的gawk中,每个{
和}
只是一个文字字符,用于向后兼容1980年代的awk(旧的、破损的awk和nawk),因此,您需要显式地告诉gawk将{1,3}
解释为RE间隔,而不是5个字符的文本字符串
Idk如果当时
\w
受支持或不受支持,那么您可能还需要使用我在上面建议的括号表达式。为什么sed受到限制?日志位于生产服务器中,我们无权使用可以直接更改那里的文件的命令。但是awk可以。。。。为什么不直接正确设置权限呢。如果您有写权限,您可以只执行>文件
。禁止命令是荒谬的。@123,顺便说一句,日志是由不同的用户创建的,我们只能读取这些文件。是的,如果我们有写权限,我知道这些工作是有效的,但是我们的管理员可能认为我们没有意识到。他们限制了“touch”命令,但是>(重定向)创建了一个文件:)。@EdMorton,谢谢,通过添加--re interval而不替换\w解决了这个问题
awk --re-interval '...'