모든 사회보장번호(SSN) 숫자를 X로 바꿉니다.

모든 사회보장번호(SSN) 숫자를 X로 바꿉니다.

모든 사회 보장 번호 시퀀스의 모든 숫자를 변경하는 sed 명령을 원합니다(형식은 다음과 같습니다).123-45-6789아니면 이거123456789) X로. 형식이 제공된 두 가지 예 중 하나와 정확히 동일하지 않은 일련의 숫자는 sed이 명령의 영향을 받지 않습니다. 숫자 순서가 모두 하나로 통합되어 있습니다.정보.txt문서.

정보.txt대략 다음과 같습니다.

id093: 888-88-8888
id094: 333-33-3333
id095: 123456789
id096: 987654321
This next number shouldn't be converted to X's 0123456789 nor this one 0987-65-4321

(에서 이 페이지를 봅니다.http://www.computerhope.com/unix/used.htm) "s 명령"에서 다음 형식을 사용해야 한다는 것을 알고 있습니다.

sed –i 's/regularexpression(s)/replacement/g' info.txt

이전에 언급한 두 형식을 준수하는 숫자만 영향을 받도록(하이픈은 유지하면서) regular expression(s)및 부분의 형식을 지정하는 방법을 잘 모르겠습니다 .replacement

답변1

sed이미 GNU ( -i확장) 를 사용하고 있는 것 같습니다 .

sed -ri ':1
         s/(^|[^-0-9])[0-9]{3}-[0-9]{2}-[0-9]{4}([^-0-9]|$)/\1XXX-XX-XXXX\2/g
         s/(^|[^-0-9])[0-9]{9}([^-0-9]|$)/\1XXXXXXXXX\2/g
         t1' your-file

(BSD 로 sed대체 )-ri-Ei ''

ddddddddd즉 , ddd-dd-dddd앞이나 뒤에 십진수 또는 하이픈이 없는 경우 합계를 변환합니다 .

그리고 perl( GNU에서 sed빌려옴 -i):

perl -pi -e 's{(?<![\d-])(\d{3}-\d\d-\d{4}|\d{9})(?![\d-])}{
  $& =~ s/\d/X/gr}eg' your-file

관련 정보