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

Re: Comando sed no linux



Em Segunda 25 Setembro 2006 10:38, Rodrigo Tavares escreveu:
> Oi pessoal,
>
>  Estou testando o sed, no trecho de codigo abaixo
>  mostra o sed subtituindo o diretorio local, por
>  sequencia de TABs ? Tem um pedaço que mostra
>  substituindo no começo da linha do TAB  ?
>  Estou meio perido nesse comando, e a variavel de
>  retorno aperece com um tab. Alguem pode explicar
>  esse
>  trecho ?
>
>
>  grepconf () {
>          w="     " # space tab
>          sq=/etc/squid/squid.conf
>          # sed is cool.
>          res=`sed -ne '
>          s/^'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
>                  t end;
>                  d;
>
>                  :end q' < $sq`
>
>          [ -n "$res" ] || res=$2
>          echo "$res"
>  }
Na verdade, não entendi o problema, mas testei sua função e, ao menos aqui, 
ela não funcionou. Ela retornou somente a primeira variável, pois ao 
encontrar a primeira ocorrência o comando é terminado (comando q, na 
linha :end). Para facilitar a leitura, recomendo que você coloque a expressão 
do sed entre aspas duplas, e as variáveis no interior sem aspas. E você pode 
usar [:space:] em vez de definir a variável w. Ficou assim, aqui:

grep2() {
        res=`sed -ne "
                s/^$1[[:space:]][[:space:]]*\([[:alnum:]]*\).*/\1/p;
                t;
                d;
                " $sq`
        [ -n "$res" ] || res="No match"
        echo "$res"
        }

Evitei também o uso do símbolo +, que em tese não funciona em regex básicas 
(ver regex(7)). 

No entanto, em nenhum dos meus testes encontrei uma tabulação na variável 
final. Talvez você possa ser mais preciso...

Tiago.



Reply to: