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

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

Re: [shell-script] Re: SED - como ir selecionando trechos de acordo com


From: phfbettega
Subject: Re: [shell-script] Re: SED - como ir selecionando trechos de acordo com um padrão
Date: Mon, 19 Sep 2016 15:06:37 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0

Olá Édnei, fiz um loop usando bash

while read linha; do
[[ "$linha" =~ ^$ ]] || {
if [[ "$linha" =~ ^\. ]]; then
top_nome="${linha#.}"
continue
else
echo "topology.sh printConnectorStatus $top_nome ${linha#*:}"
fi;}
done <topologias-conectores.txt

A entrada é o que vc postou no primeiro email sem todas as linhas em branco,
só as linhas em branco entre os blocos.
Abraços Paulo

On 19-09-2016 13:16, Édnei Rodrigues address@hidden [shell-script] wrote:


Olá pessoal, obrigado pelo interesse.

Eu não respondi antes porque eu trabalhei 15 dias direto e, assim, peguei esse 
findi para descansar.

Tentarei explanar melhor qual é a intenção aqui.

Eu tenho um script chamado topology.sh que ao usar como parâmetro 
printConnectorStatus, tu podes passar a
topologia e o conector. Essa é sintaxe:

/topology.sh printConnectorStatus CADIRTEWS 
object=tews_sicrediUsuario_merge,dv=so_caidmtews_userpassword

Eu já pensei no código e já coloquei num txt todos as topologias e conectores 
existentes. Para cada topologia,
eu coloquei um '.' no início para identificá-lo. Para caracterizar o fim da 
lista de comandos, eu inseri uma
linha em branco.

Minha idéia é ler esse arquivo, montar o comando acima e executar ( o retorno 
será um STARTED ou DOWN ) para
cada topologia e seus conectores.

Por isso, eu estava tentando montar um SED para pegar a uma Topologia de vez e 
ir executando seus respectivos
conectores. Logo, pensando numa forma eficiente, seria algo assim:

Comando SED 'pegar nome depois do .' > TOPOLOGIA_NOME

Comando SED 'PEGAR proxima linha depois do primeiro ponto até a proxima linha 
branca' > Arquivo temporário ou
Variável

LOOP leitura da saida acima

/.topology.sh printConnectorStatus TOPOLOGIA_NOME Var_loop

Peço desculpas por não ter sido mais rápido na resposta, mas eu estava cansado 
mesmo.

Att,

Édnei Rodrigues


Em 17 de set de 2016 2:02 PM, "Rodrigo Cunha address@hidden 
<mailto:address@hidden>
[shell-script]" <address@hidden <mailto:address@hidden>> escreveu:

    __


    Ednei,crie uma amostra pra galera entender qual é a sua finalidade,  
coloque em anexo um arquivo a ser
    processado (INPUT) e mais dois; um contendo um arquivo com o processamento 
desejado e um contendo um
    arquivo com o erro que vc encontrou.
    Lógicamente, crie os arquivos com uma pequena amostra, vai ser mais simples 
de entender o que vc quer fazer.
    Abração!

    Em 17 de setembro de 2016 09:45, 'Julio C. Neves' address@hidden 
<mailto:address@hidden>
    [shell-script] <address@hidden <mailto:address@hidden>> escreveu:

        __


        Itamar, não havia respondido nada, pq minhas dúvidas foram exatamente 
iguais às suas.


        Em 17 de set de 2016 09:33, "address@hidden <mailto:address@hidden> 
[shell-script]"
        <address@hidden <mailto:address@hidden>> escreveu:

            __


            Caro Édnei

            Fiquei com algumas dúvidas sobre o que deseja e sobre o arquivo de 
exemplo:
            1 - A cada trecho que começa por uma linha iniciado por um ponto ( 
como vc descreveu ), seguida de
            letras maúsculas até o final da linha ( minha dedução cujo regex seria 
"/\.[A-Z]+$/" ) e que
            também poderia ser linhas iniciadas por ".CADIR", e outra por 
".COMPUTE".

            2 - O final de cada bloco há uma linha vazia, todavia no exemplo 
que passou não chegou contendo.
            Isso pode ser um problema pela maneira como chegou via o fórum, por 
isso pergunto.
            Se for isso a segunda parte da regex poderia ser limitada assim 
/^$/ ou /^[[:blank:]]*$/ se houver
            a possibilidade de conter espaços ou tabulações.

            3 - O último comando que lista apenas os "títulos" não deveria ser:
            $ sed -n '/^\./p' listas_conectores.txt
            Do jeito que passou comigo listou apenas um, e não todos.

            4 - Para cada trecho desejado vc quer fazer um processamento 
distinto dentro do sed.
            Se é isso um filtro generalista de começo não serve, como a regex 
"/\.[A-Z]+$/" que sugeri a pouco
            e talvez o uso por limite inicial por número da linha como vc usou 
pode ser ineficaz, caso o
            conteúdo seja variável.
            Para isso vc pode montar os blocos definindo explicitamente o 
começo e o final, por exemplo:
            $ sed -n '/\.CADIRIDS/,/^$/ {
                *** comandos para esse trecho ***
                p
            }' listas_conectores.txt

            ou se precisar limitar o fim de outra forma com o uso do ponto 
inicial:
            $ sed -n '/\.CADIRIDS/,/^\./ {
                /\./ { /\.CADIRIDS/!q; }
                *** comandos para esse trecho ***
                p
            }' listas_conectores.txt


            Não sei se fui claro em minhas dúvidas e se o que sugeri lhe ajuda.

            De toda forma, seria como abordaria usando o sed.

            []'s
            Itamar




    --
    Atenciosamente,
    Rodrigo da Silva Cunha


--------------------------------------------------------------------------------------------------------------
Enviado por: =?UTF-8?Q?=C3=89dnei_Rodrigues?= <address@hidden>
--------------------------------------------------------------------------------------------------------------


reply via email to

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