slogan
Visite também: BR-Linux.org · Dicas-L · SoftwareLivre.org · UnderLinux

Linux banner
Linux banner


» Screenshot
Arch Linux XFCE
Por pylm

Comunidades

Selecionando string por padrão. [RESOLVIDO]

[1] Enviado em 24/04/2012 - 16:59h Selecionando string por padrão. [RESOLVIDO]
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


Hello folks!!

Então, tenho um aquivo com centenas de linhas, mas gostaria de jogar em outro arquivo
apenas as linhas que seguissem um determinado padrão.

Gostaria de salvar apenas as strings que começassem com uma letra A-Za-z na primeira posição,
um número na segunda posição 0-9, outra letra A-Za-z e outro número 0-9.
Detectado esse padrão salvar a linha em outro arquivo.

Exemplo do arquivo.

joão
maria
a1s2antonio
A1s2Marcia
laranja
p4k7silvio
1casa2
M7j3Pedro

A saída seria:
a1s2antonio
A1s2Marcia
p4k7silvio
M7j3Pedro

Quem puder me mostrar o caminho, lembrando que sou iniciante em shell script, e estou
aprendendo ainda repetições e as coisas mais básicas, essa de manipular strings de forma avançada
ainda estou perdido.

valeu.



 

  


Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Melhor resposta

[2] Enviado em 24/04/2012 - 18:04h:
Re: Selecionando string por padrão. [RESOLVIDO]

Feito...

egrep '^[A-Za-z][0-9][A-Za-z][0-9]'


Agora a explicação de como foi feito fica por sua conta ;)



 

[3] Enviado em 24/04/2012 - 18:15h hohohoh
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


Bom é a cara de pokerface qdo a solução é tão simples pra um problema aparentemente chato. putz...

Grande AprendiNoLinux, sempre salvando a pátria, e sim, entendi o comando...
com aqueles links que vc me passou no outro post já ajudou muito. e cada exemplo vou melhorando mais.

todo dia aprendo uma coisa nova, vou fazendo coisas..
e sem ajuda seria bem mais complicado....
valeu d+ cara..

 

[4] Enviado em 24/04/2012 - 20:28h Re: Selecionando string por padrão. [RESOLVIDO]
Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)


doctorx777 escreveu:

Bom é a cara de pokerface qdo a solução é tão simples pra um problema aparentemente chato. putz...

Grande AprendiNoLinux, sempre salvando a pátria, e sim, entendi o comando...
com aqueles links que vc me passou no outro post já ajudou muito. e cada exemplo vou melhorando mais.

todo dia aprendo uma coisa nova, vou fazendo coisas..
e sem ajuda seria bem mais complicado....
valeu d+ cara..


kkkk
Aqui no VOL quando estava iniciando li um artigo que foi finalizado com a seguinte frase:


"Nunca desencorage ninguém que continuamente faz progresso, não importa quão devagar" Platão


Guardei esta mensagem com carinho porque me lembro bem como fui recebido quando não sabia nem como instalar o linux na minha máquina. Não que tenha evoluído muito, rsrs. Ainda estou apanhando para atualizar entre versões diferentes.
O importante é que o conhecimento só tem valor se compartilhado. Aprendi esta lição aqui no VOL e só estou retribuindo o que recebi quando aqui cheguei a mais ou menos 1 ano e pouco. ;)

Se não tem mais dúvidas, pode fechar o tópico por favor ?



 

[5] Enviado em 25/04/2012 - 09:14h opa...
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


Ae AprendiNoLinux, na verdade tenho outra dúvida sim.
depois da sua resposta já consegui fazer muita coisa no arquivo.

agora me falta limpar uns lixos, aqueles caracteres que ficam sem
ser reconhecido pelo editor.
preciso apagar todas as linhas que NÃO contenha os caracteres padrão (digamos "digitáveis do teclado)

Exemplo:

Input:

joaodoido���safdasd
joao1234
ZXCVB:!"�$%^:QWERTY:YUIP{/'?@~}QWE!"���
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

Output:

joao1234
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

depois da sua resposta eu tentei estabelecer os intervalos, funcionou muito bem
enquanto eu estava preso apenas a letras e numeros.
um [A-Za-z0-9] resolve meu problema em partes, mas eu não sei o "Range" para os
outros caracteres "digitáveis" de modo q elimine os lixos como no exemplo acima.

se puder dar uma força ai com mais essa, fico eternamente grato.

Valeu.


 

[6] Enviado em 25/04/2012 - 09:17h corrigindo...
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


O site aqui editou o caractere.
na verdade onde tem &#65533
é uma "interrogação dentro de uma caixinha" no editor aqui.
ou seja, um caractere que o editor nao conseguiu identificar.
não sei se consegui explicar. mas tudo bem...

 

[7] Enviado em 25/04/2012 - 09:58h Quase...
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


Fala ai AprendiNoLinux,

Acho que achei a resposta, mas não estou conseguindo fazer funcionar.
Lendo uns textos por ai encontrei esse pdf: http://aurelio.net/regex/apostila-conhecendo-regex.pdf

é um pdf muito legal sobre expressões regulares.

A resposta para minha ultima pergunta está na página 12 desse pdf.
ou seja, é so especificar o intervalo dos caracteres de acordo com a tabela
ASCII.

então olhando ali todos os "digitáveis" que me são conveniente, o intervalo seria do ! até o ~
só que ao usá-lo no egrep ele me retorna NADA.

$cat arquivo.txt | egrep [!-~]
de acordo com o texto isso deveria me mostrar todas as linhas que contém
caracteres nesse intervalo de acordo com a tabela ASCII.
mas não está dando certo,

tem alguma idéia do pq?

Valeu!!

 

[8] Enviado em 25/04/2012 - 10:05h Re: Selecionando string por padrão. [RESOLVIDO]
Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)


doctorx777 escreveu:

Ae AprendiNoLinux, na verdade tenho outra dúvida sim.
depois da sua resposta já consegui fazer muita coisa no arquivo.

agora me falta limpar uns lixos, aqueles caracteres que ficam sem
ser reconhecido pelo editor.
preciso apagar todas as linhas que NÃO contenha os caracteres padrão (digamos "digitáveis do teclado)

Exemplo:

Input:

joaodoido&#65533;&#65533;&#65533;safdasd
joao1234
ZXCVB:!"&#65533;$%^:QWERTY:YUIP{/'?@~}QWE!"&#65533;&#65533;&#65533;
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

Output:

joao1234
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

depois da sua resposta eu tentei estabelecer os intervalos, funcionou muito bem
enquanto eu estava preso apenas a letras e numeros.
um [A-Za-z0-9] resolve meu problema em partes, mas eu não sei o "Range" para os
outros caracteres "digitáveis" de modo q elimine os lixos como no exemplo acima.

se puder dar uma força ai com mais essa, fico eternamente grato.

Valeu.


Quando fiz o quote deu para ver os reais valores dos caracteres.
Já que você não sabe o local em que irão ocorrer, vamos mudar a abordagem do problema.
Em vez de tentar descobrir quem está errado, vamos dizer quem está certo e inverter a lógica.
Então o filtro será:

[:alnum:] = Letras e dígitos. ou [:graph:] Caracteres imprimíveis. o problema é que não inclui espaços.
Já o [:print:] inclui espaços.

Veja qual atende melhor o seu padrão de filtro. Mesmo que não faça ainda o trabalho completo em um comando, você sempre poderá continuar o filtro na mesma linha igual foi feito no outro dia ok ?

Na dúvida, mande aí.


 

[9] Enviado em 25/04/2012 - 10:06h Re: Selecionando string por padrão. [RESOLVIDO]
Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)


doctorx777 escreveu:

Fala ai AprendiNoLinux,

Acho que achei a resposta, mas não estou conseguindo fazer funcionar.
Lendo uns textos por ai encontrei esse pdf: http://aurelio.net/regex/apostila-conhecendo-regex.pdf

é um pdf muito legal sobre expressões regulares.

A resposta para minha ultima pergunta está na página 12 desse pdf.
ou seja, é so especificar o intervalo dos caracteres de acordo com a tabela
ASCII.

então olhando ali todos os "digitáveis" que me são conveniente, o intervalo seria do ! até o ~
só que ao usá-lo no egrep ele me retorna NADA.

$cat arquivo.txt | egrep [!-~]
de acordo com o texto isso deveria me mostrar todas as linhas que contém
caracteres nesse intervalo de acordo com a tabela ASCII.
mas não está dando certo,

tem alguma idéia do pq?

Valeu!!


Sim. Você pensou certinho rsrs. Vou tentar...

 

[10] Enviado em 25/04/2012 - 10:23h Re: Selecionando string por padrão. [RESOLVIDO]
Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)


Pergunta:


Output: Tem que sobrar estes ? #Opção1

joao1234
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]





Ou deve sobrar só estes ? #Opção2
joao1234
zxcvb12345



Se for só este do final tá fácil.

egrep -v '[[:punct:]]'


Onde [:punct:] = caracteres de pontuação. Mas ele é muito restritivo e pode remover quem você não deseja. O -v mostra só quem não tem pontuação. Mas se o correto for a #opação1, voltamos ao alnum, alpha ou cntrl.

Me diga qual o certo.

 

[11] Enviado em 25/04/2012 - 10:56h ..
Linux user: Leandro Medeiros
doctorx777

(usa Ubuntu)


Na verdade AprendiNoLinux tem que sobrar esses:

joao1234
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

Pra ficar mais fácil o que eu quero:
olhando aquela tabela ASCII do link que coloquei, quero só os caracteres
do ! até o ~ que são respectivamente os numeros de 33 a 126 da tabela.

qualquer caractere fora desse range, deverá ser excluída a linha toda.

é isso ai.

 

[12] Enviado em 25/04/2012 - 14:23h Re: Selecionando string por padrão. [RESOLVIDO]
Linux user: Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)


doctorx777 escreveu:

Na verdade AprendiNoLinux tem que sobrar esses:

joao1234
zxcvb12345
123454675670&*(%$%!@#$@#$%
)&*(%&$%:<><M<|\[~]

Pra ficar mais fácil o que eu quero:
olhando aquela tabela ASCII do link que coloquei, quero só os caracteres
do ! até o ~ que são respectivamente os numeros de 33 a 126 da tabela.

qualquer caractere fora desse range, deverá ser excluída a linha toda.

é isso ai.


ok, tentando....



 

  
<< Primeira | Anterior Próxima | Última >>
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade GNU/Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda.