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