Expressões regulares para higienizar números de telefone

1

Eu estou tentando escrever um script que usa sed e leva um arquivo de texto contendo números de telefone com código de área 301 seguido por 209 (3012093934, (301) 2093935, (301)209-3936). Eu tenho que remover o espaço em branco, parênteses, onde eles separam o código de área e o número. Então eu tenho que escrever os números corretos para outro arquivo; os números corretos, ou seja, os que começam com o código de área 301, seguido por 209 e exatamente mais 4 dígitos.

Portanto, minha expressão regular é essa, mas não parece funcionar corretamente:

sed -n 's/(^301[\- ]*)/(209)/([0-9][0-9][0-9][0-9]$\)/p'

Alguém pode ajudar? Agradecemos antecipadamente !!!

    
por Pepka 13.01.2017 / 21:05

4 respostas

2
sed -n 's/.*\(301\).*\(209\).*\([0-9]\{4\}\)//w foobar'

Isso remove todos os caracteres antes de 301 (para contabilizar (309) ) e zero ou mais ocorrências de espaço e ) após 301 com exatamente quatro dígitos após 209 ignorando quaisquer caracteres não dígitos . A saída é gravada em foobar .

    
por 13.01.2017 / 21:37
4

remova todos os caracteres que não sejam um dígito e, em seguida, remova as linhas que não iniciam como desejado; finalmente, remova aquelas que não tenham 10 caracteres:

sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'
    
por 13.01.2017 / 21:20
3

Gostaria de começar removendo os caracteres indesejáveis com tr e, em seguida, filtrando com grep :

tr -d '() -'|grep '301209[0-9][0-9][0-9][0-9]$'
    
por 13.01.2017 / 21:25
2
sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'
    
por 18.01.2017 / 12:54