2012-07-05 33 views
0

我必須編寫一個腳本來屏蔽日誌文件中的敏感數據。我很困惑如何實現這個?哪個選項將是最適合做同樣的:用於屏蔽日誌文件中敏感數據的Unix腳本?

  • 使用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 
+0

你的問題應該顯示研究工作。 – Zaid 2012-07-05 11:53:18

+1

'perl -ple's/^ phone \ s + \ K [\ pN - ] + $/XXX-XXX-XXXX/i'inputfile> outputfile' – TLP 2012-07-05 12:01:57

+0

它是功課嗎? – 2012-07-05 12:02:58

回答

2

單向使用awk。當在行首(忽略大小寫)中找到單詞phone,dobpin替換第二個字段中的所有字符,但是-X。每行都執行print命令。

awk ' 
    BEGIN { 
     IGNORECASE = 1 
    } 
    $1 ~ /^(phone|dob|pin)$/ { 
     gsub(/[^-]/, "X", $2) 
    } 
    { print } 
' $HOME_DIR/testdata.dat >$HOME_DIR/testdataupd.dat 
+0

我真的很感謝你。這個邏輯幫助了我想達到的目標。好消息是,現在我完成了我想要做的事情:)。再次感謝。 – 2012-07-06 10:32:40

+0

@Nitin:如果您發現此答案有幫助,請考慮將其標記爲已接受。 – 2012-07-06 11:55:28

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

+0

如果我們可以在awk中使用它,那麼怎麼樣?你說什麼? 另外我有5個領域,我需要掩蓋它。那麼我們應該製作一系列這些字段並使用上面的sed命令來做到這一點? – 2012-07-05 12:10:43

+0

感謝您的幫助! – 2012-07-06 10:32:57

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/gX替換所有出現的-的剩餘字段。
  • H追加一個換行符,然後將PS添加到HS。
  • x與PS交換HS
  • s/\(\S*\)\n\(\S*\)/\2/用修改後的字段替換原來的第二字段。
+0

感謝您的幫助! – 2012-07-06 10:31:30

+0

測試不起作用,添加-e仍然不起作用。 'sed:-e表達式#1,字符29:未知命令:'\'' – 2012-07-06 10:43:36

+0

@potong你是什麼意思第二版?我有'GNU sed version 4.2.1' – 2012-07-07 19:33:38