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

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

Re: RES: RES: [shell-script] Variaveis no sed


From: Max Leandro Angelo
Subject: Re: RES: RES: [shell-script] Variaveis no sed
Date: Fri, 07 Jan 2005 09:01:46 -0300
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

galera...

gostaria de postar meu script q criei a partir da ajudar d vcs...

ele faz a instalacao d uma library e joga o path da instalaca em um 
arquivo q vai ser lido por um comando pra compilar o php...

#./bin/bash
# Chamar funcao usando:
# addpath modulo path
addpath ()
        {
                case $1 in
                  zlib)         cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  libpng)       cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  libjpeg)      cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  freetype)     cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  gd)           cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  mhash)        cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  httpd)        cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                  php)          cat .installpath | sed "s/:.*$//" > 
teste1 ; cat teste1 | sed "s#^$1#$1 :       $2#g" > teste ; cat teste > 
.installpath;;
                esac
        }


install-libpng ()
    {
        wget -t 0 -c -P /tmp/.softexpert 
http://heanet.dl.sourceforge.net/sourceforge/libpng/$libpng.tar.gz
        cd $dir
        tar -xzf $libpng.tar.gz
        cd $dir$libpng
        ./configure --prefix=/usr/isosystem
        make
        make install
        make clean
        addpath libjpng /usr/isosystem
    }

echo "Verificando libpng"
# Localiza o arquivo, separa somente o primeiro resultado, lista o 
conteudo do arquivo,
# separa somente as q contem "libpng version" e joga a saida no arquivo 
teste
cat $(find /usr -name "png.h" | head -1) | grep 'libpng version' > teste

# Separa somente a primeira linha
awk 'NR == 1' teste > teste1

# Separa somente o valor do versao
awk -F" " '{ print $4 }' teste1 > teste

# Retira o ponto no segundo caracter
sed 's/.//2' teste > teste1

# Retira o ponto no terceiro caracter
sed 's/.//3' teste1 > teste

# Variavel para verificar a Existencia e Versao do software
VAR1=`cat teste`

if [ -z "$VAR1" ]; then
    install-libpng
else
        #Verifica se a versao eh menor que a necessaria
        if [ $VAR1 -lt 100 ]
      then
        install-libpng
      else
        find /usr -name "libpng.so" | head -1 > teste2
        cat teste2 | sed "s#/libpng.so##g" > teste3
        var1=`cat teste3`
        addpath libpng $var1
        rm -f teste2
        rm -f teste3
        fi
fi
rm -f teste
rm -f teste1

eh claro q ele vai bem alem, mas acho q jah deu pra ter uma ideia d como 
funciona...

boa parte foi feito a partir da ajuda d tdos vcs, e eu soh tenho q 
agradecer a galera ae!!

valeu!!! e ateh a proxima!!!

[]'s

maxx

Julio Cezar Neves - DATAPREVRJ wrote:

>Vou pegar uma carona nessa resposta. Eu comecei respondendo a esta pergunta,
>calculando que a substituição do $1 $2 desse algum caractere significativo
>para o sed, então eu propus (dando tiro no escuro, pq não sabia os valores
>de $1 $2) que o Max fizesse o seguinte:
>
>eval sed "'s/zlib/"$1 $2"/g'" .installpath
>
>Agora eu digo: Bullshit! A solução é muito mas simples, pq a barra (/) é o
>separador padrão do sed, mas não é obrigatório. Agora que sei que tinham
>outras barras no interior do sed, posso afirmar: mude o separador. Veja só
>como:
>
>sed "s#zlib#$1 $2#g" .installpath
>
>[ ]s,
>Julio 
>:wq
>
>
>| -----Mensagem original-----
>| De: SuSE List [mailto:address@hidden]
>| Enviada em: quinta-feira, 6 de janeiro de 2005 11:37
>| Para: address@hidden
>| Assunto: Re: RES: [shell-script] Variaveis no sed
>| 
>| 
>| 
>| Max, veja só:
>| 
>| arquivo de entrada:
>| 
>| msptst2:/home/vinicius # more teste
>| zlib
>| wzlibi
>| wzlibii
>| zlib
>| 
>| script da sua função:
>| 
>| #!/bin/bash
>| # add_path_install
>| case $1 in
>|         zlib)
>|         cat teste | sed "s/^$1/$1 $2/g";
>|         ;;
>|         esac
>| 
>| saida:
>| 
>| msptst2:/home/vinicius # ./addpath_install zlib "\/usr\/local"
>| zlib /usr/local
>| wzlibi
>| wzlibii
>| zlib /usr/local
>| 
>| O erro :
>| 
>| sed: -e expression #1, char 14: Unknown option to 's'
>| 
>| ocorre por na sua entrada de variável $2  quando vc coloca a variavel 
>| /usr/local  sem as "" (aspas duplas) e sem a \ para inibir o 
>| caracter / 
>| o /sed/ vai interpretar um comando errado...imagine *sed 
>| 's/zlib//usr/local/g'* , onde o /sed/ nao entende esta entrada...
>| 
>| msptst2:/home/vinicius # ./addpath_install zlib */usr/local*
>| sed: -e expression #1, char 15: Unknown option to `s'
>| msptst2:/home/vinicius # ./addpath_install zlib *\/usr\/local
>| *sed: -e expression #1, char 15: Unknown option to `s'
>| msptst2:/home/vinicius # ./addpath_install zlib "/usr/local"
>| sed: -e expression #1, char 15: Unknown option to `s'
>| 
>| para funcionar como nos exempos acima, o /usr/local deve estar com 
>| "\/usr\/local" para que na substituição da variavel $2 seja 
>| feita como 
>| \/usr\/local e o /sed/ aceite o comando...veja:
>| 
>| msptst2:/home/vinicius # cat teste | sed "s/^zlib/zlib 
>| \/usr\/local/g";
>| zlib /usr/local
>| wzlibi
>| wzlibii
>| zlib /usr/local
>| 
>| coloquei o ^ na frente do zlib na string de busca apenas para 
>| exemplificar no arquivo de teste que ele busque apenas as strings que 
>| iniciem com zlib...senao sairia assim:
>| 
>| msptst2:/home/vinicius # more teste
>| zlib
>| wzlibi
>| wzlibii
>| zlib
>| msptst2:/home/vinicius # cat teste | sed "s/zlib/zlib \/usr\/local/g";
>| zlib /usr/local
>| wzlib /usr/locali
>| wzlib /usr/localii
>| zlib /usr/local
>| 
>| Me corrijam se eu estiver falando besteira...
>| 
>| []s
>| 
>| Vinicius
>| 
>| 
>| Max Leandro Angelo wrote:
>| 
>| >Ola Julio!!
>| >
>| >Muito obrigado pela explicacao:)
>| >
>| >eu coloquei entre aspas as variaveis no comando do sed e nao 
>| funcionou
>| >cat .installpath | sed 's/zlib/"$1 $2"/g'
>| >
>| >tentei assim tbm....
>| >cat .installpath | sed "s/zlib/$1 $2/g"
>| >mas ele me retorna um erro
>| >sed: -e expression #1, char 14: Unknown option to 's'
>| >
>| >Sera q eu naum to conseguindo aplicar no meu exemplo, o 
>| conhecimento, da 
>| >maneira correta? pode me dar um exemplo usando o sed, por favor? :)
>| >
>| >obrigado!!
>| >
>| >[]'s
>| >
>| >Julio Cezar Neves - DATAPREVRJ wrote:
>| >
>| >  
>| >
>| >>Usando aspas, apóstrofos e barra invertida
>| >>Para usar literalmente um caractere especial sem que o 
>| Shell interprete seu
>| >>significado, coloque o caractere entre aspas ou entre 
>| apóstrofos ou coloque
>| >>uma barra invertida antes dele. Seus usos característicos 
>| são melhores
>| >>definidos assim:
>| >>*  Aspas - Quando se coloca um caractere especial entre 
>| aspas, o Shell
>| >>ignora o seu significado, exceto no caso deste caractere 
>| ser um cifrão ($),
>| >>uma crase (`), ou uma barra invertida(\).
>| >>*  Apóstrofos - Os apóstrofos são mais restritivos. Todos 
>| os caracteres
>| >>entre apóstrofos são ignorados.
>| >>*  Barra Invertida - O Shell ignora um e somente um 
>| caractere que segue
>| >>a barra invertida. Quando colocada ao final da linha, o 
>| Shell interpreta a
>| >>barra invertida como um aviso de continuação da linha, 
>| devolvendo um prompt
>| >>secundário (PS2) na linha seguinte da tela. Mas, note bem, 
>| isto ocorre
>| >>porque o <ENTER> não foi visto pelo Shell por estar 
>| seguindo a contra barra.
>| >>                           Se você for criativo, 
>| descobrirá muitos usos
>| >>para a barra invertida.Vejamos um unalias imediato: suponha 
>| que você tenha
>| >>feito: alias rm='rm -i', caso você execute: \rm <arq>, o 
>| arquivo <arq> será
>| >>removido sem solicitar a confirmação, porque quando você colocou a
>| >>contrabarra (\), você escondeu da interpretação do Shell o 
>| r do comando rm,
>| >>então ele não executou o alias.
>| >>Exemplos:
>| >>$ echo *
>| >>Arq1 Arq2 ....
>| >>$ echo \\  A 1ª barra invertida inibiu a atuação da 2ª
>| >>\
>| >>$ echo \   O Shell  não viu o <ENTER> e
>| >> 
>| >>
>| >>    
>| >>
>| >>><^c>      devolveu um prompt secundário (>)
>| >>>   
>| >>>
>| >>>      
>| >>>
>| >>$ echo "\" As aspas não inibem a interpretação da \
>| >> 
>| >>
>| >>    
>| >>
>| >>><^c>
>| >>>   
>| >>>
>| >>>      
>| >>>
>| >>$ echo Estou escrevendo uma linha compacta.
>| >>Estou escrevendo uma linha compacta
>| >>$ echo Assim    não   se       escreve    uma    linha    
>| espacejada.
>| >>Assim não se escreve uma linha espacejada. Os brancos são
>| >>significativos para o Shell
>| >>$ echo  "Estou     escrevendo   uma       linha     espacejada."
>| >>Estou     escrevendo   uma       linha     espacejada.
>| >>
>| >>Então, conforme você viu, para que as variáveis sejam 
>| interpretadas pelo
>| >>shell, é necessário que elas estejam entre aspas e não 
>| entre apóstrofos.
>| >>
>| >>Julio 
>| >>:wq
>| >>
>| >>| -----Mensagem original-----
>| >>| De: Max Leandro Angelo [mailto:address@hidden]
>| >>| Enviada em: quinta-feira, 6 de janeiro de 2005 10:45
>| >>| Para: address@hidden
>| >>| Assunto: [shell-script] Variaveis no sed
>| >>| 
>| >>| 
>| >>| 
>| >>| Ola
>| >>| 
>| >>| Estou fazeendo uma funcao q o valor recebe duas variaveis e 
>| >>| insere num 
>| >>| comando sed, mas o sed, naum reconhece minhas variaveis, pq 
>| >>| sua sintaxe 
>| >>| fica entre ''.... como posso usar variaveis em uma 
>| sintaxe no sed??
>| >>| 
>| >>| meu script eh o seguinte:
>| >>| 
>| >>| #./bin/bash
>| >>| 
>| >>| addpath_install ()
>| >>|         {
>| >>|                 case $1 in
>| >>|                   zlib)  cat .installpath | sed 's/$1/$(echo 
>| >>| $1 \t $2/g' 
>| >>|  > teste ;;
>| >>|                 esac
>| >>|         }
>| >>| 
>| >>| addpath_install zlib /usr/local
>| >>| 
>| >>| --------------------------------------------------------------
>| >>| --------------------------------
>| >>| 
>| >>| Minha ideia, eh verificar qual o nome da biblioteca 
>| (zlib) que foi 
>| >>| informado, e inserir o caminho informado na segunda variavel, 
>| >>| dentro do 
>| >>| arquivo .installpath, substiuindo a linha inteira onde estava 
>| >>| a primeira 
>| >>| variavel, pelo conjunto formado pela primeira variavel + 
>| >>| segunda variavel :)
>| >>| 
>| >>| Esse script somente elimina a primeira variavel, q estah na 
>| >>| linha... eu 
>| >>| queria uma q apagasse a linha, e inserisse o conjunto... :(
>| >>| 
>| >>| -- 
>| >>| Max Leandro Angelo
>| >>| Suporte Tecnico
>| >>| SoftExpert Quality Software
>| >>| +55 (47) 2101-9900
>| >>| http://www.softexpert.com
>| >>| 
>| >>| 
>| >>| 
>| >>| 
>| ---------------------------------------------------------------------
>| >>| Esta lista não admite a abordagem de outras liguagens de 
>| >>| programação, como perl, C etc. Quem insistir em não seguir 
>| >>| esta regra será moderado sem prévio aviso.
>| >>| 
>| ---------------------------------------------------------------------
>| >>| Sair da lista: address@hidden
>| >>| 
>| ---------------------------------------------------------------------
>| >>| Esta lista é moderada de acordo com o previsto em 
>| >>http://www.listas-discussao.cjb.net
>| >>------------------------------------------------------------
>| ---------
>| >>
>| >>Links do Yahoo! Grupos
>| >>
>| >>
>| >>
>| >>
>| >>
>| >>
>| >>
>| >>
>| >>
>| >>------------------------------------------------------------
>| ---------
>| >>Esta lista não admite a abordagem de outras liguagens de 
>| programação, como perl, C etc. Quem insistir em não seguir 
>| esta regra será moderado sem prévio aviso.
>| >>------------------------------------------------------------
>| ---------
>| >>Sair da lista: address@hidden
>| >>------------------------------------------------------------
>| ---------
>| >>Esta lista é moderada de acordo com o previsto em 
>http://www.listas-discussao.cjb.net
>  
>
>>>---------------------------------------------------------------------
>>>
>>>Links do Yahoo! Grupos
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>   
>>>
>>>      
>>>
>> 
>>
>>    
>>
>
>
>
>[As partes desta mensagem que não continham texto foram removidas]
>
>
>
>---------------------------------------------------------------------
>Esta lista não admite a abordagem de outras liguagens de programação, como
>perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
>aviso.
>---------------------------------------------------------------------
>Sair da lista: address@hidden
>---------------------------------------------------------------------
>Esta lista é moderada de acordo com o previsto em
>http://www.listas-discussao.cjb.net
>---------------------------------------------------------------------
> 
>Links do Yahoo! Grupos
>
>
>
>
> 
>
>
>
>
>---------------------------------------------------------------------
>Esta lista não admite a abordagem de outras liguagens de programação, como 
>perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
>aviso.
>---------------------------------------------------------------------
>Sair da lista: address@hidden
>---------------------------------------------------------------------
>Esta lista é moderada de acordo com o previsto em 
>http://www.listas-discussao.cjb.net
>---------------------------------------------------------------------
> 
>Links do Yahoo! Grupos
>
>
>
>
> 
>
>
>
>
>  
>

-- 
Max Leandro Angelo
Suporte Tecnico
SoftExpert Quality Software
+55 (47) 2101-9900
http://www.softexpert.com



[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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