Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

1. Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 07/11/2017 - 13:42h

Como faço para que o comando grep filtre apenas as linhas que correspondam a um determinado padrão de caracteres?

preciso que o grep exiba apenas as linhas em que os arquivos estão na raiz do primeiro diretório.. (neste caso, as 4 primeiras linhas..)

./diretorio/arquivo.txt
./diretorio/arquivo2.txt
./diretorio/arquivo3.zip
./diretorio/arquivogrande4
./diretorio/outro/arquivo.txt
./diretorio/outro/arquivo1.txt
./diretorio/novo/arquivo2.zip

por exemplo, algo como:
cat lista.lst | grep "REGRA??" >> lista-nova.lst 




  


2. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/11/2017 - 16:24h

raserafim escreveu:

Como faço para que o comando grep filtre apenas as linhas que correspondam a um determinado padrão de caracteres?

preciso que o grep exiba apenas as linhas em que os arquivos estão na raiz do primeiro diretório.. (neste caso, as 4 primeiras linhas..)

./diretorio/arquivo.txt
./diretorio/arquivo2.txt
./diretorio/arquivo3.zip
./diretorio/arquivogrande4
./diretorio/outro/arquivo.txt
./diretorio/outro/arquivo1.txt
./diretorio/novo/arquivo2.zip

por exemplo, algo como:
cat lista.lst | grep "REGRA??" >> lista-nova.lst 



Boa tarde Raserafim.
egrep  '^\.\/[a-z]+\/[a-z0-9]+\.[a-z]+|\.\/[a-z]+\/[a-z0-9]+$' lista.lst 

awk, "casando" o Número de Campos . .
awk -F"/" 'NF<=3{print $0}' lista.lst 

Att.:
Marcelo Oliver



3. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 08/11/2017 - 15:49h

msoliver,

ainda não deu certo..

mas já adianto meus agradecimentos!

veja se é possível uma solução mais ou menos assim...
cat lista.lst | grep "./diretorio/*[!/]" >> lista-nova.lst 

o primeiro diretório é sempre conhecido: então pode ficar logo com o nome "./diretorio/"

a questão central agora é: depois desse diretório quero filtrar os arquivos que estão na raiz desse diretório; não quero filtrar nada dos subdiretórios.

então, imagino eu, bastaria algo como "qualquer nome" (*) que "não contenha uma barra" (/)...

regra: "./diretorio/qualquernome_que_naotenhabarra"



4. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/11/2017 - 16:54h

raserafim escreveu:

msoliver,

ainda não deu certo..

mas já adianto meus agradecimentos!

veja se é possível uma solução mais ou menos assim...
cat lista.lst | grep "./diretorio/*[!/]" >> lista-nova.lst 

o primeiro diretório é sempre conhecido: então pode ficar logo com o nome "./diretorio/"

a questão central agora é: depois desse diretório quero filtrar os arquivos que estão na raiz desse diretório; não quero filtrar nada dos subdiretórios.

então, imagino eu, bastaria algo como "qualquer nome" (*) que "não contenha uma barra" (/)...

regra: "./diretorio/qualquernome_que_naotenhabarra"

Raserafim, boa tarde.
Testei aqui, usando sua "listagem" e as duas sugestões anteriores funcionam . . .
Segue mais uma sugestão:
egrep '\./[a-z]+/[a-z0-9.]+$' listagem
./diretorio/arquivo.txt
./diretorio/arquivo2.txt
./diretorio/arquivo3.zip
./diretorio/arquivogrande4

marcelo oliver


5. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/11/2017 - 13:28h

msoliver escreveu:

Testei aqui, usando sua "listagem" e as duas sugestões anteriores funcionam . . .


no exemplo ilustrativo que dei, seu código funciona perfeitamente..!

mas, quando transponho para o meu código (que é mais complexo) não estou conseguindo fazer funcionar..

tentarei novamente a partir das suas sugestões..




6. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/11/2017 - 18:25h

msoliver,

é possível uma regra que deixe de fora as linhas que contenham 3 ou mais barras (/)?


7. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/11/2017 - 19:06h

raserafim escreveu:

msoliver,
é possível uma regra que deixe de fora as linhas que contenham 3 ou mais barras (/)?


Boa noite raserafim.
Sim é possível!
A REGEX que postei, faz exatamente isso!
Mais uma opção:
grep -E '^\.(/[a-z0-9.]+){2}$' Listagem
Marcelo Oliver


8. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/11/2017 - 20:01h

transpondo para o meu código não funciona..

não existe algo mais simples..?

por exemplo..
grep -E '/+{2}' Listagem 

ou seja, ver simplesmente se o caractere / aparece 3 ou mais vezes ao longo de uma linha?


9. Re: Grep: exibir as linhas que correspondam a um determinado padrão de caracteres [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 10/11/2017 - 12:40h

consegui resolver!

mas a transposição da solução do meu código para esse exemplo ilustrativo não funciona...

não entendo o porquê; assim como não entendo o inverso.

de todo modo, segue a solução em uma tentativa de adaptação...:
cat lista.lst | grep "\./" | grep -v "[^.]/" > lista-nova.lst  #apenas os arquivos da raiz (anterior ao ./diretorio/)

cat lista.lst | grep "\./diretorio/" | grep -v "\./diretorio/[a-z/]" >> lista-nova.lst #apenas os arquivos da raiz


msoliver, obrigado pelas tentativas!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts