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

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

Re: [shell-script] Pegar_peda�o_de_texto


From: Aurelio Marinho Jargas
Subject: Re: [shell-script] Pegar_pedaço_de_texto
Date: Fri, 25 Jun 2004 14:20:01 -0300 (ART)

olá endrigo,

--- "Endrigo G. Ferreira" <address@hidden> escreveu:

> Tô precisando pegar um pedaço de um texto. Vou explicar.
> Em uma estrutura mais ou menos assim:
> /tmp/log/user1
> arq1.log
> arq2.log
> arq3.log
> ...
> arq999.log
...
> Eu preciso criar um programa que entre em cada um desses arquivos,

ok, vamos por partes (e sem fazer a piadinha previsível do jack).

o primeiro passo é criar um programa que entre nos diretórios
de cada usuário e leia os arquivos. uma das maneiras de se
fazer isso é com um for:

   #!/bin/bash
   cd /tmp/log
   for user in user* ; do
      cd $user
      echo "estou no dir $user"
      echo "aqui tem $(ls -l | wc -l) arquivos"
      cd ..    # sobe um diretório
   done   

esse é o esqueleto do teu script, ele entra em cada diretório
de usuário e mostra quantos arquivos tem dentro.

não adianta pensar no resto do problema enquanto isso não
estiver funcionando.

 
> se achar um determinado string ele salva o conteúdo (várias
> linhas) que tem logo apos essa string até encontrar outra
> determinada string

para achar um bloco de linhas dentro de um arquivo você pode
usar o grep ou o sed. como não é um número fixo de linhas
após a primeira string, não dá pra ser o grep. com o sed,
a sintaxe é a seguinte:

   sed -n '/string1/ , /string2/ p' arquivo

e o sed só mostrará na tela o trecho de linhas que está entre
string1 e string2, inclusive as próprias.

teste esse comando isolado, em um arquivo apenas. depois que
estiver funcionando, coloque dentro do script, dentro do for,
logo após os 'echo'.


> em um único arquivo userX.

o sed joga na tela a saída, então basta direcioná-la para
um arquivo com o >

   sed -n ... > userX

mas como é um único arquivo de resultado para toda a busca,
use o redirecionamento que anexa no final ao invés de apagar,
o >>:

   sed -n ... >> userX

isso vai fazer com que o arquivo userX seja criado dentro do
diretório do usuário. se quiser que os arquivos com o resultado
fiquem no mesmo nível dos diretórios, para não misturar com
os logs, use o .. para subir um diretório:

   sed -n ... >> ../userX

ou melhor, no teu script:

   sed -n ... >> ../$user.log

ah, o ... do sed é aquele comandão lá de cima, já o ../
é literal mesmo.


> pelo que percebi, é possível fazer isso com shell script.
> E como eu estou começando a aprender shell script, não 
> tô conseguindo.

percebeu certo! é o tipo de tarefa que não há linguagem
melhor que o shell para fazer.

dê uma olhada nos links de http://aurelio.net/shell para
aprender mais sobre shell script e se apaixonar de uma vez
pela linguagem.

falou!


=====
-- 
Aurelio Marinho Jargas, Curitiba, Conectiva
A odisseia verde no FISL http://aurelio.net/curso/fisl

______________________________________________________________________

Yahoo! Mail - agora com 100MB de espaço, anti-spam e antivírus grátis!
http://br.info.mail.yahoo.com/


reply via email to

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