shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] o trio de comandos find cat grep


From: Fernando Mercês
Subject: Re: [shell-script] o trio de comandos find cat grep
Date: Mon, 16 Oct 2017 16:54:39 -0200

Hahaha pô Julião, mas os usuários do macOS também são filhos de Deus né!? É uma questão de inclusão. rsrs :-)

Na real eu migrei não por conta de shell e afins (obviamente), mas por conta dos software proprietários que preciso usar no trabalho (cliente de VPN, de streaming, etc). Nada disso funciona no Linux, ou funciona precariamente (não por culpa do Linux). Eu passava mais tempo compilando driver que trabalhando. Com o Mac consegui focar no que importa, e meus servers continuam Debian firmes e fortes. Testo meus software em ambos agora e sigo feliz. hehehe

Grande abraço!


Att,

@MercesFernando
mentebinaria.com.br
---------------------------

2017-10-16 14:47 GMT-02:00 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br>:
 

Pô Fernando.
Mac!? Macquequeisso!? Tsc, tsc, tsc... ;)

Gostei do ponto de interrogação colocando o "e" de jpeg como opcional.

O find tem uma opção, se não me engano regextype, que vc pode especificar qual set de regex vc está usando. Peraí, deixa dar uma pesquisada...

É isso mesmo: regextype: tipos válidos são "findutils-default", "awk", "egrep", "ed", "emacs", "gnu-awk", "grep", "posix-awk", "posix-basic", "posix-egrep", "posix-extended", "posix-minimal-basic", "sed".

Se eu fosse vc sairia dessa vala comum e voltaria para o seu bom e velho Debian ;) Kkkk

Novidade! Dia 08/11​ abriremos as inscrições para um treinamento
de Shell Script que será lecionado em 5 semanas no formato EAD
e que será ministrado por Julio Neves e Rubens Queiroz (dicas-l)

Abcs,
Julio

Damos treinamento em sua empresa com certificado
e nota fiscal por um preço, no mínimo, 50% mais
barato que qualquer curso.

​​
Nosso time de instrutores in company é formado somente por
autores
​ ​
de Best Sellers
​ ​
​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico




Em 16 de outubro de 2017 12:54, Fernando Mercês address@hidden [shell-script] <address@hidden.br> escreveu:
 

Wow. -iregex matou a pau. Muito bom, Julio! :-)

No macOS precisou da opção -E do find, pra interpretar o "ou da regex |":

     -E      Interpret regular expressions followed by -regex and -iregex pri-
             maries as extended (modern) regular expressions rather than basic
             regular expressions (BRE's).  The re_format(7) manual page fully
             describes both formats.


Aí fiz assim (usando a interrogação pra diminuir um "ou"):

$ find -E . -type f -iregex '.*\.(jpe?g|gif|bmp)$'

Sempre aprendo nessa lista! Valeu a todos!


Att,

@MercesFernando
mentebinaria.com.br
---------------------------

2017-10-16 9:57 GMT-02:00 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br>:
 

Caro Jorge,
vou aproveitar a sua dúvida para dar uma dica para a lista:

=====
Sempre que vc pensar em usar um cmd cat dentro de um script, repense, pois deve ser desnecessário
=====

É muito frequente fazermos coisas do tipo cat ARQ | CMD. 99% das vezes o CMD aceita ARQ como parâmetro. P.ex.:
Troque: cat ARQ | grep CADEIA
Por: grep CADEIA ARQ

Troque: cat ARQ | cut PARMS
Por: cut PARMS ARQ
Onde: PARMS = -d, -f, -s, ...

Tb é comum, em cmds que só aceitam os dados de ARQ vindos pela entrada primária, vermos o tal do cat desnecessário. P.ex.:
Troque: cat ARQ | tr X Y
Por: tr X Y < ARQ

Veja isso:
$ wc -l ARQ
4 ARQ
Normalmente vc só quer a qtd de linhas, não importa o nome. Então para ludibriar o cmd e ele não sabero o nome do arquivo vc faz:
$ cat ARQ | wc -l
4
Aconteceu o que vc queria, mas vc pode fazer o mesmo de forma bem mais otimizada, fazendo:
$ wc -l < ARQ
4

O shell passará somente os dados de ARQ para o wc contar e ele não saberá o nome do arquivo para listar.

Jamais se esqueça que o pipe é tremendamente útil, mas ele cria um fork, gerando um subshell.

Recomendo que, à luz do que expliquei, vc façam:

$ grep -l cat /diretorio/dos/meus/scripts/*
Isso irá gerar o nome de todos os seus scripts que usam o cmd cat. Analise um por um e vc verá que existe muita coisa que pode ser otimizada.

Agora, voltando à dúvida do Jorge, que a essa altura já deve ter descartado o uso do cat. Jorge o seu find pode ser otimizado para o seguinte formato:

find . type f -iname \*.jpg -o -iname \*.jpeg -o -iname \*.bmp -o -iname \*.png -o -iname \*.gif

ou, mais facilmente:

find . -type f -iregex '.*\(jpg\|jpeg\|png\|gif\)'

Novidade! Dia 08/11​ abriremos as inscrições para um treinamento
de Shell Script que será lecionado em 5 semanas no formato EAD
e que será ministrado por Julio Neves e Rubens Queiroz (dicas-l)
Todos os detalhes em:

Abcs,
Julio

Damos treinamento em sua empresa com certificado
e nota fiscal por um preço, no mínimo, 50% mais
barato que qualquer curso.

​​
Nosso time de instrutores in company é formado somente por
autores
​ ​
de Best Sellers
​ ​
​laureados ​sobre os temas. P. exemplo:

Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico




Em 16 de outubro de 2017 05:47, Jorge Barros de Abreu address@hidden [shell-script] <address@hidden.br> escreveu:
 

Olá

Eu usava 'find' e gravava em um arquivo e depois usava um 'cat' para jogar no 'grep'.

Recentemente tive problemas com o trio de comandos acima.
O problema tinha a ver (provavelmente) com nomes de arquivos vindos de sistemas
operacionais diferentes e com acentos e com espaços.

Na internet tem diversas soluções para renomear arquivos.
Não achei nenhuma que resolvesse ***todos*** os problemas.
Alguns arquivos tive de sair na violencia mesmo.
Renomear um por um. :-))).

O que me chamou a atenção nessa coisa toda foi o comando abaixo
que compartilho agora:

find . '(' -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPEG' -o -name '*.JPG' -o -name '*.bmp' -o -name '*.png' -o -name '*.gif' ')'

O motivo de usar o comando acima foi que o grep estava abortando
em algum momento (não sei o motivo).

Foi o que resolveu meu problema.
Eliminei o cat e o grep.

A título de enriquecimento do diálogo faço a seguinte pergunta:

Existe alguma chave ou opção de linha de comando que melhore o comportamento
do grep e evitar que ele aborte inesperadamente e sem nenhuma mensagem de erro???

Obrigado.
Até.

--
Data Estelar 2458042,860336
http://sites.google.com/site/ficmatinf
Desejo-lhe Paz, Vida Longa e Prosperidade.
São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]