基於我的回答here,這會掩蓋號碼的開頭和離開標籤,括號和最後四位數字的卡號的幾乎任意數字:
sed -e 'h' -e 's/.*\([0-9]\{4\}\)/\1/' -e 'x' -e 's/\(.*\[\)\([0-9]*\)\([0-9]\{4\}\)./\1\2/' -e 's/[0-9]/*/g' -e 'G' -e 's/\n//'
如果您需要驗證總數位數只落在給定範圍內,那也可以完成。
編輯:
這裏有幾種方法:
經過該過長或過短號碼不變:
sed -e '/.*\[[0-9]\{12,19\}\]/!b' -e 'h' -e 's/.*\([0-9]\{4\}\)/\1/' -e 'x' -e 's/\(.*\[\)\([0-9]*\)\([0-9]\{4\}\)./\1\2/' -e 's/[0-9]/*/g' -e 'G' -e 's/\n//'
CARD_NUMBER=[12345678] yields CARD_NUMBER=[12345678]
CARD_NUMBER=[123456789012] yields CARD_NUMBER=[********9012]
CARD_NUMBER=[123456789] yields CARD_NUMBER=[123456789]
掩蓋編號的所有數字是太長或太短使用不同的掩碼字符:
sed -e '/.*\[[0-9]\{12,19\}\]/!{s/[0-9]/x/g;b}' -e 'h' -e 's/.*\([0-9]\{4\}\)/\1/' -e 'x' -e 's/\(.*\[\)\([0-9]*\)\([0-9]\{4\}\)./\1\2/' -e 's/[0-9]/*/g' -e 'G' -e 's/\n//'
CARD_NUMBER=[12345678] yields CARD_NUMBER=[xxxxxxxx]
CARD_NUMBER=[123456789012] yields CARD_NUMBER=[********9012]
CARD_NUMBER=[123456789] yields CARD_NUMBER=[xxxxxxxxxxxxxxxxxxxx]
請你也張貼不應該被刪除的數據的例子嗎? – Thomas 2010-02-17 17:07:51
這是這個問題的後續:http://stackoverflow.com/questions/2232200/regular-expression-in-sed-for-masking-credit-card – 2010-02-17 19:06:40