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: