0

我必须编写一个脚本来屏蔽日志文件中的敏感数据。我很困惑如何实现这个?哪个选项最适合做同样的事情:

  • 使用 AWK
  • 使用 SED
  • 使用 SED、AWK
  • 使用 PERL
  • 使用简单的文件读取和搜索逻辑。

如果您有任何建议,请分享。

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
4

3 回答 3

2

一种使用方式awk。当找到 wordsphone或在行首(忽略大小写)时,在第二个字段中替换除 . 之外的dob所有字符。该命令对每一行执行。pin-Xprint

awk '
    BEGIN { 
        IGNORECASE = 1
    }
    $1 ~ /^(phone|dob|pin)$/ {
        gsub( /[^-]/, "X", $2 )
    }
    { print }
' $HOME_DIR/testdata.dat >$HOME_DIR/testdataupd.dat
于 2012-07-05T18:02:30.970 回答
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

于 2012-07-05T11:58:56.957 回答
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仅处理行开头PhoneDOBPin(在此处添加更多内容)
  • h复制模式空间 (PS) 以保留空间 (HS),即复制当前行。
  • s/\S*\s*//删除第一个字段和后面的空格。
  • s/[^-]/X/g用's 在剩余字段中替换所有出现的-'s 。X
  • H附加一个换行符,然后将 PS 附加到 HS。
  • x用 PS 交换 HS
  • s/\(\S*\)\n\(\S*\)/\2/用修改后的字段替换原来的第二个字段。
于 2012-07-05T13:12:59.090 回答