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 № 1grep -vq ">0.00<" $FILENAME || sed -i "|>0.00<|d" $FILENAME
Zweiter Befehl wird ausgeführt Nur Datei enthält 0.00 in allen Zeilen.