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: SuSE List
Subject: Re: RES: RES: [shell-script] Variaveis no sed
Date: Thu, 06 Jan 2005 14:06:35 -0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.2) Gecko/20040803

Salve Julio!!!! Saudacoes do mestre Obi-Wan....(e que venha a Revanche 
dos Sith)

Cara, eheheh, com a empolgação destes dias, realemente eu esqueci deste 
"pequeno" detalhe.....o separador / é o padrão mas pode ser trocado por 
outro tipo
de separador.....o lado negro da força nao me deixou raciocinar direito...

[]

Viny

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
>
>
>
>
> 
>
>
>
>
>
>  
>



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



reply via email to

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