W systemie Windows z użyciem PowerShell, jakie są równoważne polecenia Linuksa na head
, tail
, more
, less
i sed
?
windows
powershell
Yue Zhang
źródło
źródło
notepad
jako bazy, sugerowałbym przyjrzenie się alternatywnym edytorom tekstu, istnieje wiele (zarówno bezpłatnych, jak i płatnych) alternatyw. Wszystkie są lepsze od notatnika (choć nie jest to duże wyzwanie).Odpowiedzi:
Get-Content
(alias:)gc
jest typową opcją odczytu pliku tekstowego. Następnie możesz dalej filtrować:Działa to wystarczająco dobrze w przypadku małych plików, większe (więcej niż kilka MiB) są prawdopodobnie nieco powolne.
W PowerShell Community Extensions zawiera kilka apletów poleceń dla wyspecjalizowanych plików rzeczy (np Get-FileTail).
źródło
-last 2
1GB CSV. Napój gorący: ☕Get-Content -Tail 2
zamiast tego. To zdecydowanie szybsze.gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
w rzeczywistości nie jest to w pełni narzędzie sed, ponieważ nie przywraca zawartości. Potrzebuje zestawu treści.-Last
jest powolny z tego samego powodu,awk
byłby powolny w przypadku tego samego zadania: najpierw musi całkowicie zużywać strumień. DlategoGet-Content -Tail
istnieje. I nie ma,head
ponieważ nie pasuje do konwencji nazewnictwa, a jego cel już służySelect-Item
.-head
. Zobacz moją odpowiedź stackoverflow.com/a/41626586/1081043Oto wbudowane sposoby wykonywania
head
itail
. Nie używaj potoków, ponieważ jeśli masz duży plik, będzie on bardzo wolny. Korzystanie z tych wbudowanych opcji będzie niezwykle szybkie, nawet w przypadku dużych plików.źródło
| select -last
używa rur. Używam-tail
bez rur. Ale jeśli kiedykolwiek znajdziesz dwie sprzeczne odpowiedzi, prawdopodobnie możesz zaufać osobie o znacznie wyższej reputacji. Możesz też po prostu wypróbować obie metody na dużym pliku. Będzie to bardzo oczywiste w przypadku dużego pliku.more.exe
istnieje w systemie Windows, portyless
można łatwo znaleźć (a rozszerzenie społeczności programu PowerShell , PSCX, zawiera jeden).PowerShell tak naprawdę nie zapewnia żadnej alternatywy dla oddzielnych programów, ale w przypadku danych strukturalnych
Out-Grid
może być pomocny.Head
iTail
oba mogą być emulowane przySelect-Object
użyciu odpowiednio parametrów-First
i-Last
.Sed
funkcje są dostępne, ale mają inną strukturę. Opcje filtrowania są dostępne wWhere-Object
(lub przezForeach-Object
oraz w niektórych stanach dla zakresów). Inne, przekształcające operacje można wykonać za pomocąSelect-Object
iForeach-Object
.Jednak gdy PowerShell przekazuje obiekty (.NET) - z całą ich typowaną strukturą, np. daty pozostają
DateTime
instancjami - a nie tylko ciągami, które każda komenda musi sama przeanalizować, wielesed
innych programów jest zbędnych.źródło
„-TotalCount” w tym przypadku odpowiada dokładnie tak samo, jak „-head”. Musisz użyć -TotalCount lub -head, aby uruchomić polecenie w ten sposób. Ale -TotalCount jest mylący - nie działa w RZECZYWISTYM podając ŻADNE liczby ...
Powyższy skrypt, przetestowany w PS 5.1, jest tą samą odpowiedzią, co poniżej ...
Więc po prostu użyj już '-head 25'!
źródło
Jeśli chcesz przeszukiwać duże (lub małe) pliki dziennika w systemie Windows, najlepszym narzędziem, jakie znalazłem, jest bezpłatny Log Parser 2.2 firmy Microsoft . Możesz zadzwonić do tego z PowerShell, jeśli chcesz, a on wykona za Ciebie wszystkie ciężkie prace, a także bardzo szybko.
źródło
Mam kilka lepszych rozwiązań:
źródło
Przy okazji, nie otrzymujesz wszystkich błędów z kodem pushpop, twój kod działa tylko z opcją "sed". Cała reszta ignoruje wszystko poza gc i ścieżką.
źródło