/ / eliminación condicional de líneas en un archivo xml usando sed - xml, linux, bash, sed

eliminación condicional de líneas en el archivo xml usando sed - xml, linux, bash, sed

Es posible que esta pregunta no tenga una respuesta directa ... si es así, no se preocupe. Tengo un archivo XML que parece algo así

<a>0.00</a>
<b>0.00</b>
<c>0.00</c>
<d>0.00</d>

Esta es una versión tonta de lo que estoy trabajandocon. Mi objetivo es eliminar cualquier línea con un punto de datos de cero, si y solo si todos los puntos de datos son cero (como se muestra en el ejemplo anterior). Incluso si una de las líneas del archivo contiene una entrada distinta de cero, i No puedo borrar ninguno de ellos. Por ejemplo si lo anterior era

<a>0.00</a>
<b>0.00</b>
<c>1.00</c>
<d>0.00</d>

entonces el archivo debe permanecer intacto. En última instancia, solo quiero eliminar todas las líneas si todas tienen cero en todas y cada una de las etiquetas, y dejar el archivo como está. Sé que lo siguiente funcionará si todas las líneas tienen una entrada de datos cero.

sed --in-place "|>0.00</|d" $FILENAME

Sin embargo, si tengo el segundo ejemplo a continuación, esto me dejará con

<c>1.00</c>

que no es lo que estoy buscando. Sé que probablemente necesito una sentencia if, algo como

if (all lines contain the string ">0.00</") then
sed --in-place "|>0.00</|d" $FILENAME
fi

Supongo que es la condición en la sentencia ifde lo que no estoy seguro. ¿Cómo diría "si todas las líneas contienen la cadena mencionada anteriormente"? No necesariamente tengo que usar sed, he usado awk en el pasado, pero estoy más cómodo con sed .. .. Cualquier entrada o punteros en la dirección correcta serían los más apreciados. Gracias

Respuestas

2 para la respuesta № 1
grep -vq ">0.00<" $FILENAME || sed -i "|>0.00<|d" $FILENAME

El segundo comando se ejecuta solo el archivo contiene 0.00 en todas las líneas.