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

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

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


From: SuSE List
Subject: Re: RES: [shell-script] Variaveis no sed
Date: Thu, 06 Jan 2005 11:36:47 -0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.2) Gecko/20040803

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]



reply via email to

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