Substituir todos os dígitos do Social Security Number (SSN) por X's

0

Eu quero um comando sed que altere todos os números em todas as sequências # da Previdência Social (formatadas apenas como 123-45-6789 ou 123456789 ) para Xs . Qualquer seqüência de números que não esteja formatada exatamente como um dos dois exemplos fornecidos não deve ser afetada pelo comando sed . As seqüências numéricas estão todas em um arquivo info.txt .

info.txt parece mais ou menos assim:

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

De olhar para esta página ( link ) em "O comando s", eu sei que este é o formato eu preciso usar:

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

Não sei ao certo como formatar as porções regular expression(s) e replacement para que somente os números que se encaixam nos dois formatos mencionados anteriormente sejam afetados (mantendo os hífens).

    
por velkoon 19.04.2017 / 12:56

1 resposta

2

Já que você já está usando o GNU sed ( -i extension):

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

(com BSD sed , substitua -ri por -Ei '' )

Isso é converter os ddddddddd e ddd-dd-dddd , desde que não sejam precedidos nem seguidos por um dígito decimal ou hífen.

Com perl (do qual o% GNUsed emprestou esse -i ):

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