Dúvida - Linux - Expressão regular (egrep) [RESOLVIDO]

1. Dúvida - Linux - Expressão regular (egrep) [RESOLVIDO]

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 04/09/2020 - 11:02h

Galera, bom dia,
Estou com uma dúvida.

Tenho um arquivo TESTE.TXT com as seguintes informações:
LOGIN|DOMINIO
FULANO_1|DM-1234
FULANO_2|DM-003
FULANO_3|AB-1456
FULANO_4|DNO-1234
FULANO_5|AVB-78945
FULANO_6|DM-12345
FULANO_7|DM-CSS
FULANO_8|WE-789
FULANO_9|DM-CCS
FULANO_10|DM-_1456

E preciso retornar tudo o que é diferente desses 2 padrões: DM-CCS e DM-[0-9]{4}
Ou seja ou ele tem que ser exatamente igual a DM-CCS ou ele precisa ser composto por DM-(e exatamente 4 dígitos númericos)

Faço a seguinte expressão regular para validar isso:
awk -F'|' '{gsub("\"","", $2); gsub(" ","", $2); printf "%s-%s\n" ,NR,$2 "-" $1}' TESTE.TXT | egrep -v 'DM-CCS' | egrep -v '[DM]{2}[-][0-9]{4}' | awk -F'-' '{printf "%s-%s\n", $2,$3}'

Porém, o valor FULANO_6|DM-12345 está sendo tratado como correto, mas não deveria pq são 5 posições numéricas ao invés de apenas 4.

Quem puder ajudar desde já agradeço demais.

Vlw!!!




  


2. Dúvida - Linux - Expressão regular (egrep)

Alexandre Rios
alex_tj

(usa Outra)

Enviado em 08/09/2020 - 12:51h

Fiz apenas uma alteração no código onde vejo o tamanho da string tbm, não ficou uma resolução mto bonita, mas funcionou.

awk -F'|' '{gsub("\"","", $2); gsub(" ","", $2); printf "%s|%s\n" ,NR,$2 "|" $1}' /media/arquivos-sistemas/etl/DESENVOLVIMENTO/OTN_STG_PEOPLE_ANALYTICS/inp/mensal/TESTE.TXT | awk -F "|" '{if ( $2 != "DM-CCS" && (substr($2,1,3) != "DM-" || length($2) != 7) ) {printf "%s\n" , $0}}' | nl


flws!


3. Re: Dúvida - Linux - Expressão regular (egrep) [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/09/2020 - 18:18h

alex_tj escreveu:

Galera, bom dia,
Estou com uma dúvida.

Tenho um arquivo TESTE.TXT com as seguintes informações:
LOGIN|DOMINIO
FULANO_1|DM-1234
FULANO_2|DM-003
FULANO_3|AB-1456
FULANO_4|DNO-1234
FULANO_5|AVB-78945
FULANO_6|DM-12345
FULANO_7|DM-CSS
FULANO_8|WE-789
FULANO_9|DM-CCS
FULANO_10|DM-_1456

E preciso retornar tudo o que é diferente desses 2 padrões: DM-CCS e DM-[0-9]{4}
Ou seja ou ele tem que ser exatamente igual a DM-CCS ou ele precisa ser composto por DM-(e exatamente 4 dígitos númericos)

Faço a seguinte expressão regular para validar isso:
awk -F'|' '{gsub("\"","", $2); gsub(" ","", $2); printf "%s-%s\n" ,NR,$2 "-" $1}' TESTE.TXT | egrep -v 'DM-CCS' | egrep -v '[DM]{2}[-][0-9]{4}' | awk -F'-' '{printf "%s-%s\n", $2,$3}'

Porém, o valor FULANO_6|DM-12345 está sendo tratado como correto, mas não deveria pq são 5 posições numéricas ao invés de apenas 4.
Quem puder ajudar desde já agradeço demais.
Vlw!!!

Boa tarde Alex:
Segundo a sua especificação 01:
E preciso retornar tudo o que é diferente desses 2 padrões: DM-CCS e DM-[0-9]{4}
gawk -F"|" 'NR>1 && $2!~/^DM-(CSS|[0-9]{4})$/ {print $2,"["length($2)"]"}' texto.txt
Ou
sed -nr '/\|DM-(CCS|[0-9]{4})$/!p' texto.txt

especificação 02:
Tem que ser exatamente igual a DM-CCS ou ele precisa ser composto por DM-(e exatamente 4 dígitos numéricos)
gawk -F"|" '$2~/^DM-(CSS|[0-9]{4})$/ {print $1,$2,"["length($2)"]"}' texto.txt |column -t
Ou
sed -nr '/\|DM-(CCS|[0-9]{4})$/p' texto.txt

Nota: O Número entre [], é o tamanho do campo 02.
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts