sed를 사용하여 파일에서 신용 카드 번호의 마지막 4자리를 제외한 모든 숫자를 마스킹하는 가장 쉬운 방법은 무엇입니까?
egrep과 다음 정규 표현식을 사용하면 Visa, Mastercard, Discover, American Express, Diner's Club 및 JCB의 번호를 찾을 수 있습니다.
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
이 transaction.log에는 다른 중요한 숫자가 있을 수 있다는 점을 명심하세요. 해당 번호는 터치하면 안되며, 신용카드 번호가 아닌 형식입니다.
신용카드 번호 형식의 예: 38012345678901
기타 숫자 형식의 예:2014-02-11 22:23, 1134-53553, 4-5-6-7-7-2
비자: 4123456789012
, 4123456789012345
,41234567890123456
마스터카드: 5123456789012345
, 512345678901234
,51234567890123455
발견하다: 6011123456789012
, 6512345678901234
, 601112345678901
,60111234567890123
아메리칸 익스프레스: 341234567890123
, 371234567890123
, 34123456789012
, 301234567890123, 3712345678901234
만찬 클럽:37012345678901
JCB: 213112345678901
, 180012345678901
, 3512345678901234
, 21311234567890
, 18001234567890
, , 2131123456789012
,
1800123456789012
,
35123456789012
가장 간단한 찾기 및 바꾸기는 무엇입니까?
답변1
*
숫자가 정확히 14자리인 경우에만 처음 10자리를 숫자로 바꾸려면 다음을 수행하십시오 .
sed 's/\([^0-9]\)[0-9]\{10\}\([0-9]\{4\}\)\([^0-9]\|$\)/\1**********\2\3/g'
예:
$ 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
편집하다
업데이트된 예의 패턴과 정확히 일치하려면 다음을 수행하세요.
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'
이는 다음 파일에서 작동합니다.
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
주어진
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
물론 첫 번째 문자는 38012345678901
카드 패턴 목록에 존재하지 않기 때문에 일치하지 않습니다.