Jak mogę odrzucić ostatnie n wierszy pliku z uniksowym filtrem wiersza poleceń?
To byłoby w pewnym sensie przeciwne tail
: tail
odrzuca pierwsze n linii, ale przepuszcza resztę, ale chcę, aby polecenie przepuściło wszystko oprócz ostatnich n linii.
Niestety nie znalazłem czegoś takiego - też head
nie pomaga. EDYCJA : Przynajmniej w Solarisie nie przyjmuje negatywnych argumentów.
Aktualizacja: Najbardziej interesuje mnie rozwiązanie, które działa dla dużych plików, tj. Logów, gdzie możesz chcieć sprawdzić, co się stało w ostatnich minutach.
Odpowiedzi:
Jeśli masz GNU
head
, możesz użyćwydrukować wszystkie oprócz ostatnich 5 wierszy
file.txt
.Jeśli
head -n
nie przyjmuje żadnych negatywnych argumentów, spróbujźródło
file.txt
co najmniej sześć linii ...)head
, zwracane jest puste wyjście bez błędów.źródło
Oto prosty sposób na usunięcie ostatniego wiersza, który działa na BSD itp.
Wyrażenie brzmi „w ostatnim wierszu, usuń go”. Pozostałe linie zostaną wydrukowane, ponieważ jest
sed
to domyślne zachowanie.Możesz połączyć je razem, aby usunąć wiele linii
Co jest trochę ciężkie, co prawda, ale wykonuje tylko jedno skanowanie pliku.
Możesz również na to spojrzeć, aby uzyskać więcej odpowiedzi: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Oto linijka dostosowana do jednego z moich ulubionych:
Miałem frajdę z rozszyfrowania tego i mam nadzieję, że ty również (:
N
Skanuje linie buforowe , ale poza tym jest całkiem wydajny.źródło
Jestem ciekawy, dlaczego według ciebie
head
nie ma takiej opcji:Wydaje się to pasować do twojego celu, na przykład używając:
źródło
head
. BSDhead
nie ma tej opcji, więc ta odpowiedź nie będzie działać na Solarisie lub innych Uniksach bez jądra GNU. OP specjalnie oznaczył to tagami Unix i Unix-Utils.Innym sposobem na zrobienie tego, jeśli
tail -n
nie przyjmie się argumentów negatywnych, jestSpowoduje to usunięcie ostatnich 5 wierszy
źródło