/ / bedingte Löschung von Zeilen in der XML-Datei mit sed-xml, linux, bash, sed

bedingtes Löschen von Zeilen in einer XML-Datei mit sed-xml, linux, bash, sed

Diese Frage hat vielleicht keine direkte Antwort ... wenn ja, keine Sorge. Ich habe eine XML-Datei, die ungefähr so ​​aussieht

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

Dies ist eine verdummte Version von dem, was ich arbeitemit. Mein Ziel ist es, jede Zeile mit einem Datenpunkt von Null zu löschen, genau dann, wenn alle Datenpunkte Null sind (wie das oben angegebene Beispiel). Selbst wenn eine der Zeilen in der Datei einen Eintrag ungleich null enthält, d kann keine von ihnen löschen. Zum Beispiel, wenn das oben war

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

dann sollte die Datei unberührt bleiben. Letztendlich möchte ich nur alle Zeilen löschen, wenn sie alle Null in jedem Tag haben, und die Datei wie sonst verlassen. Ich weiß, dass das Folgende funktioniert, wenn alle Zeilen einen Dateneintrag von Null haben.

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

Wenn ich jedoch das zweite Beispiel unten habe, wird mich das verlassen

<c>1.00</c>

Was ich nicht suche. Ich weiß, ich brauche wahrscheinlich eine if-Anweisung, etwas wie

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

Ich nehme an, es ist die Bedingung in der if-Anweisungdass ich mir nicht sicher bin. Wie würde ich sagen "wenn alle Zeilen die oben erwähnte Zeichenfolge enthalten"? Ich muss nicht unbedingt sed verwenden, ich habe awk in der Vergangenheit benutzt, aber ich bin am wohlsten mit sed .. .. Irgendwelche Eingaben oder Zeiger in die richtige Richtung würden am meisten geschätzt werden. Danke

Antworten:

2 für die Antwort № 1
grep -vq ">0.00<" $FILENAME || sed -i "|>0.00<|d" $FILENAME

Zweiter Befehl wird ausgeführt Nur Datei enthält 0.00 in allen Zeilen.