我必须编写一个脚本来掩盖日志文件中的敏感数据。我很困惑如何实现这个?哪个选项最适合做同样的事情:
如果您有任何建议,请分享。
Input File:
Name Jack
Add New York
Phone 333-333-3434
Output File:
Name Jack
Add New York
Phone XXX-XXX-XXXX
我用awk尝试了这个:
cat $HOME_DIR/testdata.dat | awk 'BEGIN{
i=1;
FS=" ";
}
{
for (i = 1; i < NF; i++) {
fld = $(i);
if( fld == "PHONE") {
printf ("%s$%s", $(i),$(i+1));
}
else if( fld == "PIN") {
printf ("%s$%s", $(i),$(i+1));
}
else if( fld == "DOB") {
printf ("%s$%s", $(i),$(i+1));
} else {
printf ("%s", $(i));
}
}
printf ("\n");
}
END{
i=1
}' > $HOME_DIR/testdataupd.dat
答案 0 :(得分:2)
使用awk
的一种方法。如果在行的开头找到单词phone
,dob
或pin
(忽略大小写),则在第二个字段中替换除-
X
之外的所有字符。每行执行print
命令。
awk '
BEGIN {
IGNORECASE = 1
}
$1 ~ /^(phone|dob|pin)$/ {
gsub( /[^-]/, "X", $2 )
}
{ print }
' $HOME_DIR/testdata.dat >$HOME_DIR/testdataupd.dat
答案 1 :(得分:0)
这是一个90%的答案,但不会按照你的要求格式化X.
sed -re 's/(Phone )(([0-9]+)-?)*/\1xxxxx/g'
了解更多字段
sed -r -e 's/(Phone )(([0-9]+)-?)*/\1xxxxx/g' -e 's/regexp-to-search-for/replacement-pattern/g' …
注意:你可以替换/和你喜欢的角色,只要它相同,所有3次,例如s~regexp~rep~g
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed '/^Phone\|^DOB\|^Pin/!b;h;s/\S*\s*//;s/[^-]/X/g;H;x;s/\(\S*\)\n\(\S*\)/\2/' file
说明:
/^Phone\|^DOB\|^Pin/!b
仅处理以Phone
,DOB
或Pin
开头的行(在此处添加更多内容)h
复制模式空间(PS)以保存空间(HS),即复制当前行。s/\S*\s*//
删除第一个第一个字段,然后删除空格。s/[^-]/X/g
将所有-
的{{1}}替换为剩余字段中的X
。H
附加换行符,然后将PS附加到HS。x
与PS交换HS s/\(\S*\)\n\(\S*\)/\2/
用修改后的第二个字段替换原来的第二个字段。