/ / warunkowe usunięcie linii w pliku xml przy użyciu sed - xml, linux, bash, sed

warunkowe usuwanie linii w pliku xml przy użyciu sed - xml, linux, bash, sed

To pytanie może nie mieć prostej odpowiedzi ... jeśli tak, to nie martw się. Mam plik XML, który wygląda mniej więcej tak

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

To głupia wersja tego, nad czym pracujęz. Moim celem jest usunięcie dowolnej linii z punktem danych równym zero, tylko wtedy, gdy wszystkie punkty danych są zerowe (jak w przykładzie podanym powyżej). Nawet jeśli jedna z linii w pliku zawiera niezerową pozycję, i nie można usunąć żadnego z nich. Na przykład, jeśli powyższe było

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

plik powinien pozostać nietknięty. Ostatecznie chcę usunąć wszystkie wiersze tylko wtedy, gdy wszystkie mają zero w każdym znaczniku i pozostawić plik w inny sposób. Wiem, że następujące będą działać, jeśli wszystkie linie mają zerowy wpis danych.

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

Jednak jeśli mam drugi przykład poniżej, to mnie zostawi

<c>1.00</c>

który nie jest tym, czego szukam. Wiem, że prawdopodobnie potrzebuję instrukcji if, coś w rodzaju

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

Przypuszczam, że jest to warunek w instrukcji ifże nie jestem pewien. Jak miałbym powiedzieć: „jeśli wszystkie wiersze zawierają wyżej wspomniany ciąg”? Niekoniecznie muszę używać sed, w przeszłości korzystałem z awk, ale najlepiej czuję się z sed… .. Wszelkie uwagi lub wskazówki we właściwym kierunku będą mile widziane. Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1
grep -vq ">0.00<" $FILENAME || sed -i "|>0.00<|d" $FILENAME

Drugie polecenie zostanie wykonane tylko plik zawiera 0,00 we wszystkich wierszach.