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

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

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


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: RES: [shell-script] Variaveis no sed
Date: Thu, 6 Jan 2005 13:00:52 -0300

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




 




reply via email to

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