使用 awk 屏蔽电子邮件地址、电话号码、ssn(模式)
Mask email address, phonenumber, ssn (pattern) using awk
要求是从日志文件中屏蔽一些敏感数据,当 awk
版本为 4.0.2 时,下面的代码按预期工作。
我将 grep
处理日志文件,然后必须使用下面 awk
片段中提到的模式屏蔽一些数据,然后 return 结果。
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 ****
如果内容在文件中,解决方案也应该有效,例如
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
中工作
激活 RE 间隔:
awk --re-interval '...'
您可能还需要将 \w
s 替换为 [[:alnum:]_]
。
您遇到的问题是,您使用的是默认启用 RE 间隔(例如 {1,3}
)之前的非常旧版本的 gawk,因此在那个旧 gawk 中,每个 {
}
只是一个文字字符,用于向后兼容 1980 年代的 awks(旧的、损坏的 awk 和 nawk),因此您需要明确告诉 gawk 将 {1,3}
解释为 RE 间隔而不是文字字符串5 个字符。
不知道当时是否支持 \w
,所以您可能还需要使用我上面建议的括号表达式。
要求是从日志文件中屏蔽一些敏感数据,当 awk
版本为 4.0.2 时,下面的代码按预期工作。
我将 grep
处理日志文件,然后必须使用下面 awk
片段中提到的模式屏蔽一些数据,然后 return 结果。
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 ****
如果内容在文件中,解决方案也应该有效,例如
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
激活 RE 间隔:
awk --re-interval '...'
您可能还需要将 \w
s 替换为 [[:alnum:]_]
。
您遇到的问题是,您使用的是默认启用 RE 间隔(例如 {1,3}
)之前的非常旧版本的 gawk,因此在那个旧 gawk 中,每个 {
}
只是一个文字字符,用于向后兼容 1980 年代的 awks(旧的、损坏的 awk 和 nawk),因此您需要明确告诉 gawk 将 {1,3}
解释为 RE 间隔而不是文字字符串5 个字符。
不知道当时是否支持 \w
,所以您可能还需要使用我上面建议的括号表达式。