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.