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: Wed, 21 Sep 2016 10:28:43 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0

Deve ser porque '||' e '{' tem que ficar na mesma linha. Se vc quiser separar 
tem que colocar
uma contrabarra e logo depois dar <enter>.
A contrabarra funciona como escape do <enter>, é como se fosse tudo uma linha 
só.

ou isso
[[ "$linha" =~ ^$]] || {

ou isso
[[ "$linha" =~ ^$]] || \
{


Sobre o ||
http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo004#Querida_Encolheram_o_Comando_Con
Abraços Paulo Bettega

ps- Sobre o uso do sed, só consegui pensar no sed alimentando o loop
e não o contrário, colocar o sed no meio do loop.
É praticamente uma tradução em sed do que eu propus em bash.

sed -nr '/^\./ {s/\.(.*)/\1/;h;n};/^[A-Z]/ {G;s/.*: (.*)\n(.*)/\2 \1/p}' 
listas_conectores.txt|
while read linha;do echo topology.sh printConnectorStatus $linha;done

A princípio eu achei que usar o ponto no começo da linha ia ser um problema, 
mas no fim
das contas ficou um ótimo delimitador. Inclusive não importa se há linhas 
vazias entre todas as
linhas ou apenas separando os blocos.

On 21-09-2016 09:48, Édnei Rodrigues address@hidden [shell-script] wrote:


Obrigado pela sugestão!

É bem interessante a proposta.
Eu testei a fórmula e houve um erro:

-rwxr-xr-x 1 rluser radiantlogic  249 Sep 21 09:33 status_connector.sh

[root@app1ssosite006h bin]# ./status_connector.sh

./status_connector.sh: line 6: unexpected token `newline', conditional binary 
operator expected

./status_connector.sh: line 6: syntax error near `{'

./status_connector.sh: line 6: ` {'

[root@app1ssosite006h bin]# cat status_connector.sh

#!/bin/bash

cat listas_conectores.txt | while read linha;

do

[[ "$linha" =~ ^$]] ||

{

if [[ "$linha" =~ ^\.]]; then

top_nome="${linha#.}"

continue

else

echo "topology.sh printConnectorStatus $top_nome ${linha#*:}"

fi;}

done

[root@app1ssosite006h bin]#

[root@app1ssosite006h bin]# bash --version

bash --version

GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)

Copyright (C) 2011 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>


O que significa aquele || ?


Em 20 de set de 2016 8:50 AM, "'Julio C. Neves' address@hidden 
<mailto:address@hidden>
[shell-script]" <address@hidden <mailto:address@hidden>> escreveu:

    __


    Se vc estiver usando Bourne Shell, o sh (mas não é esse sh do Linux, é o du 
Unix), ele não reconhece
    função declarada com:
    funtion funcao
    {
    ...
    }
    Reconhece somente com a sintaxe
    funcao ()
    {
    ...
    }

    Após declarar uma função, é a prática muito boa fazer:
    export -f funcao


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

        __


        Olá Itamar, valeu o feedback :)
        É verdade, vc tem razão, não pensei na portabilidade.
        Se for um shell com menos recursos acho que a solução seria
        isolar o bloco com sed e pegar as informações com grep, ou usar
        awk direto que faz o serviço dos dois.
        Um tempo atrás teve uma dúvida na lista sobre um shell que não 
reconhecia função,
        devia ser um dos shells do busybox.
        Esse é um exercício e tanto, fazer os scripts compatíveis com bash 3 ou 
2 pra trás.
        Abraços Paulo

        On 19-09-2016 15:36, address@hidden <mailto:address@hidden> 
[shell-script] wrote:
        >
        >
        > A solução do Paulo é perfeita.
        >
        > Simples e objetiva e atende o que deseja pela sua descrição.
        >
        > Para o que vc deseja o Sed acredito não ter suporte para executar 
comandos assim, e em puro bash vai
        direto ao
        > ponto.
        >
        > A única ressalva que faço é verificar a versão do Shell que está 
usando, pois o Paulo usou recursos
        recentes e
        > dependendo da empresa, essa atualização pode ser negligenciada, e os 
recursos sugeridos podem não
        funcionar da
        > forma como estão, mas é possível trocar por uso de "test", "sed" ou 
"grep".
        >
        > E além de tudo usando esse recursos built-in's, em epecial do Bash há 
um ganho de performance sem
        comparação.
        >
        > []'s
        > Itamar
        >
        >
        > ----------------------------------------------------------
        > Enviado por: address@hidden <mailto:address@hidden>
        > ----------------------------------------------------------


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


reply via email to

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