mlgrassi
(usa Debian)
Enviado em 02/02/2011 - 15:15h
Ok então explicando melhor.
Na realidade o arquivo sobre o qual desejo rodar o sed é um arquivo extenso e com muitas linhas a serem modificadas. Por isso pensei no for.
Eu desejo remover várias linhas diferentes ao mesmo tempo. Vou explicar como é meu arquivo.
Possuo um arquivo texto.xml que contém resultados de cálculos de médias de desempenho de um computador qualquer. Este arquivo é usado para gerar gráficos, mas enfim para não enrolar muito a história,... as vezes os gráficos atingem valores altos (picos) e o gráfico fica ruim. Para mim resolver este problema eu gostaria de eliminar os picos, mas para isto eu necessito localizá-los. Geralmente os filtro por data, mas quero filtrá-los por data E por valor. Vide abaixo e compreenderás melhor.
for i in `cat texto.xml | grep 2011-02-02 | awk '{print $2}' | grep "32\.45"`; do echo $i >> temp; done
#filtra primeiro por data, depois pela coluna em que está o resultado do cálculo do dia, depois pelo resultado do cálculo; assim irá listar todas as linhas que contém esta string e colocá-las no arquivo temp. As linhas serão diferentes pois no arquivo texto.xml há números que possuem mais casas decimais depois da vírgula, portanto tudo que tiver 32\.45 será considerado.
Após encontradas todas as linhas a serem removidas:
for i in `cat temp`; do sed -i '/$i/Id' texto.xml
Deveria remover mas não dá certo. Já tentei converter tudo o que é ponto . para \. mas mesmo assim não remove. E o comando está correto, pois não dá erro ao executar.
Alguém tem idéia de por que o sed não obedece aos comandos quando ele é usado dentro do for?