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 № 1grep -vq ">0.00<" $FILENAME || sed -i "|>0.00<|d" $FILENAME
Drugie polecenie zostanie wykonane tylko plik zawiera 0,00 we wszystkich wierszach.