Usando sed para excluir um padrão de letras / números

0

Estou trabalhando na produção de um relatório de ID genérico, e meu comando atual para pegar contas usando egrep pega a maioria das contas de que preciso, mas obviamente nenhuma conta que termine com um número, que alguns de nossos Gen IDs fazem :

cat /etc/passwd | cut -d: -f1 | egrep '^[a-z]|^[A-Z]' | egrep '[a-z]$|[A-Z]$'

Felizmente, todas as nossas contas de usuário seguem o mesmo padrão - uma carta, seguida por seis números. Como posso usar sed para imprimir todas as contas em /etc/passwd exceto aquelas que começam com uma letra seguida por 6 números?

    
por Dana R 24.02.2017 / 19:04

1 resposta

4
grep -vE '^[[:alpha:]][[:digit:]]{6}:' /etc/passwd

imprime todas as linhas de /etc/passwd , exceto aquelas que começam com um caractere alfabético seguido por 6 dígitos (seguidos por : ).

A chave está na opção -v , que diz grep para imprimir as linhas que não correspondem ao padrão.

Se você deseja apenas os nomes de usuário:

cut -d : -f 1 < /etc/passwd | grep -vEx '[[:alpha:]][[:digit:]]{6}'

Ou com sed :

sed -n '/^[[:alpha:]][[:digit:]]\{6\}:/!s/:.*//p' /etc/passwd

Observe o ! , que significa novamente não .

    
por 24.02.2017 / 19:30

Tags