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。単語が見つかった場合phonedobまたは行pinの先頭 (大文字と小文字を区別しない) で、2 番目のフィールドのすべての文字を に置き換え-ます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

これはうまくいくかもしれません(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/!bPhoneDOBまたはPin(ここにさらに追加)で始まる行のみを処理します
  • hパターン スペース (PS) をホールド スペース (HS) にコピーします。つまり、現在の行のコピーを作成します。
  • s/\S*\s*//最初の最初のフィールドとそれに続く空白を削除します。
  • s/[^-]/X/g残りのフィールドで出現する-'s をすべて 's に置き換えます。X
  • H改行を追加し、次に PS を HS に追加します。
  • xHS と PS を入れ替える
  • s/\(\S*\)\n\(\S*\)/\2/元の 2 番目のフィールドを修正されたフィールドに置き換えます。
于 2012-07-05T13:12:59.090 に答える
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 に答える