Pada jendela, menggunakan Powershell, apa perintah setara dengan linux ini head
, tail
, more
, less
dan sed
?
windows
powershell
Yue Zhang
sumber
sumber
notepad
sebagai basis Anda, saya sarankan untuk mencari editor teks alternatif, ada banyak alternatif (gratis dan berbayar). Semua lebih unggul dari notepad (meskipun itu tidak terlalu menantang).Jawaban:
Get-Content
(alias :)gc
adalah opsi biasa Anda untuk membaca file teks. Anda kemudian dapat memfilter lebih lanjut:Ini berfungsi cukup baik untuk file kecil, yang lebih besar (lebih dari beberapa MiB) mungkin agak lambat.
The PowerShell Komunitas Extensions mencakup beberapa cmdlets untuk hal-hal berkas khusus (misalnya Get-FileTail).
sumber
-last 2
pada CSV 1GB. Minuman panas: ☕Get-Content -Tail 2
. Itu pasti lebih cepat.gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
yang sebenarnya bukan sepenuhnya alat sed karena tidak mengembalikan konten. Itu membutuhkan Set-Content.-Last
lambat karena alasan yang samaawk
akan menjadi lambat untuk tugas yang sama: Ini harus menggunakan streaming sepenuhnya terlebih dahulu. Itulah mengapaGet-Content -Tail
ada. Dan tidak adahead
karena tidak sesuai dengan konvensi penamaan, dan tujuannya sudah dilayani olehSelect-Item
.-head
. Lihat jawaban saya stackoverflow.com/a/41626586/1081043Berikut cara bawaan untuk melakukan
head
dantail
. Jangan gunakan pipa karena jika Anda memiliki file besar, itu akan sangat lambat. Menggunakan opsi bawaan ini akan sangat cepat bahkan untuk file besar.sumber
| select -last
menggunakan pipa. Saya menggunakan-tail
tanpa pipa. Tetapi jika Anda menemukan dua jawaban yang saling bertentangan, Anda mungkin bisa mempercayai orang dengan reputasi yang jauh lebih tinggi. Selain itu, Anda cukup mencoba dua metode pada file besar. Ini akan terlihat sangat jelas pada file besar.more.exe
ada di Windows, portless
mudah ditemukan (dan PowerShell Community Extensions , PSCX, termasuk satu).PowerShell tidak benar-benar menyediakan alternatif apa pun untuk program terpisah, tetapi untuk data terstruktur
Out-Grid
dapat membantu.Head
danTail
keduanya dapat diemulasikan denganSelect-Object
menggunakan parameter-First
dan-Last
masing-masing.Sed
semua fungsi tersedia tetapi dengan struktur yang agak berbeda. Opsi pemfilteran tersedia diWhere-Object
(atau melaluiForeach-Object
dan beberapa status untuk rentang). Lainnya, transformasi, operasi dapat dilakukan denganSelect-Object
danForeach-Object
.Namun saat PowerShell melewati objek (.NET) - dengan semua struktur ketikannya, mis. tanggal tetap merupakan
DateTime
contoh - bukan hanya string, yang harus diurai oleh setiap perintah, banyak darised
dan program serupa lainnya yang berlebihan.sumber
"-TotalCount" dalam contoh ini merespons persis seperti "-head". Anda harus menggunakan -TotalCount atau -head untuk menjalankan perintah seperti itu. Tetapi -TotalCount menyesatkan - ini tidak berfungsi SEBENARNYA memberi Anda hitungan APA PUN ...
Script di atas, diuji di PS 5.1 adalah respon yang SAMA seperti di bawah ini ...
Jadi gunakan saja '-head 25 "!
sumber
Jika Anda perlu menanyakan file log besar (atau kecil) pada Windows, alat terbaik yang saya temukan adalah Log Parser 2.2 gratis dari Microsoft . Anda dapat memanggilnya dari PowerShell jika Anda mau dan itu akan melakukan semua pekerjaan berat untuk Anda, dan juga sangat cepat.
sumber
Saya mendapat beberapa solusi yang lebih baik:
sumber
Anda tidak mendapatkan semua kesalahan dengan kode pushpop BTW, kode Anda hanya bekerja dengan opsi "sed". Sisanya mengabaikan apa pun kecuali gc dan jalur.
sumber