Was ist der einfachste Weg, mit sed alle Zahlen außer den letzten 4 Ziffern einer Kreditkartennummer in einer Datei zu maskieren?
Durch die Verwendung von egrep mit dem folgenden regulären Ausdruck können wir Nummern von Visa, Mastercard, Discover, American Express, Diner's Club und JCB finden.
egrep "(?:4[0-9]{12}(?:[0-9]{3})?|5[12345][0-9]{14}|3[47][0-9]{13}|3(?:0[012345]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35[0-9]{3})[0-9]{11})" transactions.log
Beachten Sie, dass in diesem Transaktionsprotokoll möglicherweise noch andere wichtige Nummern vorhanden sind. Diese Nummern sollten nicht verändert werden und haben andere Formate als Kreditkartennummern.
Beispiel für das Format einer Kreditkartennummer: 38012345678901
Beispiel für ein anderes Nummernformat:2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2
Visa: 4123456789012
, 4123456789012345
,41234567890123456
MasterCard: 5123456789012345
, 512345678901234
,51234567890123455
Entdecken: 6011123456789012
, 6512345678901234
, 601112345678901
,60111234567890123
American Express: 341234567890123
, 371234567890123
, 34123456789012
, 301234567890123, 3712345678901234
Diners Club:37012345678901
JCB: 213112345678901
, 180012345678901
, 3512345678901234
, 21311234567890
, 18001234567890
, , 2131123456789012
,
1800123456789012
,
35123456789012
Am einfachsten ist Suchen und Ersetzen?
Antwort1
So ersetzen Sie die ersten 10 Ziffern durch *
, wenn und nur wenn die Nummer genau 14 Ziffern hat:
sed 's/\([^0-9]\)[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'
Beispiel:
$ echo 'foo bar 38012345678901 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2,
28012345678901,,,,, 3801234567890123456789 stuff' | \
sed 's/\([^0-9]\)[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'
foo bar **********8901 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2,
**********8901,,,,, 3801234567890123456789 stuff
Bearbeiten
So passen Sie die Muster genau an das aktualisierte Beispiel an:
sed 's/\([^0-9]\)4[0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)4[0-9]\{11\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)4[0-9]\{12\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)5[12345][0-9]\{11\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)30[12345][0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)3[47][0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{9\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)6011[0-9]\{7\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)65[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)2131[0-9]\{6,8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)1800[0-9]\{6,8\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g;s/\([^0-9]\)35[0-9]\{8,10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'
Dies für die folgende Datei:
Example of credit card number format: 38012345678901
Visa: 4123456789012, 4123456789012345, 41234567890123456
MasterCard: 5123456789012345, 512345678901234, 51234567890123455
Discover: 6011123456789012, 6512345678901234, 601112345678901, 60111234567890123
American Express: 341234567890123, 371234567890123, 34123456789012, 301234567890123, 3712345678901234
Diner's Club: 37012345678901
JCB: 213112345678901, 180012345678901, 3512345678901234, 21311234567890, 18001234567890, ,2131123456789012, 1800123456789012, 35123456789012
Example of other numbers format: 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2
gibt
Example of credit card number format: 38012345678901
Visa: **********9012, **********2345, **********3456
MasterCard: **********2345, **********1234, **********3455
Discover: **********9012, **********1234, **********8901, **********0123
American Express: **********0123, **********0123, **********9012, **********0123, **********1234
Diner's Club: **********8901
JCB: **********8901, **********8901, **********1234, **********7890, **********7890, ,**********9012, **********9012, **********9012
Example of other numbers format: 2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2
Natürlich 38012345678901
stimmt der Anfangsbuchstabe nicht überein, da er in keiner Kartenmusterliste vorhanden ist.