Saya perlu setara dengan head
perintah Unix (menampilkan garis N pertama dari output). Inilah yang saya gunakan saat ini:
tasklist | find /N " " | findstr /r \[[0-9]\]
Kode di atas menampilkan 10 baris pertama dari tasklist
output. find /N " "
menambahkan nomor baris ke awal setiap baris sementara findstr /r \[[0-9]\]
mengekstrak 10 baris pertama menggunakan regex.
Kode di atas berfungsi, tetapi saya harus menentukan rentang apa pun . Karena kenyataan bahwa ekspresi reguler tidak diterapkan sesuai dengan standar di Windows, saya tidak bisa membuat yang lain berfungsi.
Bagaimana saya bisa mengekstrak garis arbitrer dari output cmd? Penting untuk melakukan ini dengan satu garis. Tanpa skrip!
Jawaban:
Powershell.
PS C:\> netstat | Select -First 20
Sunting: Saya merasa bahwa Anda akan bersikeras bahwa Anda hanya dapat menggunakan cmd.exe sekitar tahun 1989, tetapi itu tidak benar. Powershell dimasukkan ke dalam setiap versi OS Vista +, dan dapat diinstal pada XP / 2003. Ini adalah masa depan Windows.
Sunting: Baiklah, lakukan sesuai keinginan Anda.
Akan menampilkan 10 baris pertama dari output netstat.
sumber
Jika Anda tipe orang Unix, mungkin menginstal CygWin memberi Anda lingkungan yang lebih akrab.
sumber
Ada solusi mudah yang jauh lebih mudah daripada menggunakan
for
loop " ".Mari kita ambil output dari
dir/o-d
(dir
invers -urut berdasarkan tanggal) sebagai contoh.Misal, jika Anda ingin menampilkan garis 1 hingga 16, gunakan:
Misal, jika Anda ingin menghasilkan garis 16 hingga 45, gunakan:
Output sampel:
Kerusakan:
findstr
regex sebenarnya berfungsi dengan baik. Masalah Anda adalah melarikan diri . (Lihat referensi Rob untuk detailnya.)Pertama, buang seluruh output menggunakan
dir/o-d
.Selanjutnya, tambahkan setiap baris dengan "
$Num:
" menggunakanfindstr/n ^^
^
berarti cocok dengan garis awal, dan^^
ini hanyalah versi yang diperlukan karena kita dalam cmd.Catatan: Anda perlu menggunakan
findstr
ini karenafind/n" "
tidak akan cocok dengan garis tanpa spasi`.Terakhir, pangkas output menggunakan
findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
.^1[6-9]:
adalah regex untuk 16 hingga 19.^[2-3][0-9]:
adalah regex untuk 20 - 39.^4[0-5]:
adalah regex untuk 40 hingga 45.findstr "a b c"
cara menemukan string yang cocok dengan ekspresia
,b
atauc
.Lihat juga /programming//q/8844868/632951
sumber
findstr
tidak dapat menghapus sesuatu. Saya pikir Anda mungkin terpaksa menggunakan loop kemudian dalam kasus itu.Ini adalah perintah satu baris, saya harap ini bekerja untuk Anda juga.
sumber