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 '...'