Ich benötige ein Äquivalent zum Unix- head
Befehl (zeige die ersten N Zeilen der Ausgabe an). Dies ist, was ich derzeit benutze:
tasklist | find /N " " | findstr /r \[[0-9]\]
Der obige Code zeigt die ersten 10 Zeilen der tasklist
Ausgabe an. find /N " "
Stellt eine Zeilennummer vor den Anfang jeder Zeile, während findstr /r \[[0-9]\]
die ersten 10 Zeilen mit Regex extrahiert werden.
Der obige Code funktioniert, aber ich muss einen beliebigen Bereich angeben . Aufgrund der Tatsache, dass reguläre Ausdrücke nicht gemäß den Standards in Windows implementiert sind, kann ich nichts anderes zum Laufen bringen.
Wie kann ich beliebige Zeilen aus einer Cmd-Ausgabe extrahieren? Es ist wichtig, dies mit einem Einzeiler zu tun. Keine Skripte!
Antworten:
Power Shell.
PS C:\> netstat | Select -First 20
Bearbeiten: Ich habe das Gefühl, dass Sie darauf bestehen werden, dass Sie nur cmd.exe circa 1989 verwenden können, aber das ist nicht wahr. Powershell ist in jeder Betriebssystemversion Vista + integriert und kann unter XP / 2003 installiert werden. Es ist die Zukunft von Windows.
Bearbeiten: Okay, haben Sie es nach Ihren Wünschen.
Zeigt die ersten 10 Zeilen der Ausgabe von netstat an.
quelle
Wenn Sie ein Unix-Typ sind, bietet Ihnen die Installation von CygWin möglicherweise eine vertrautere Umgebung.
quelle
Es gibt eine einfache Lösung, die viel einfacher ist als die "
for
" Verwendung der Schleife.Nehmen wir als Beispiel die Ausgabe von
dir/o-d
(indir
umgekehrter Reihenfolge nach Datum).Wenn Sie beispielsweise die Zeilen 1 bis 16 ausgeben möchten, verwenden Sie:
Wenn Sie zB die Zeilen 16 bis 45 ausgeben möchten, verwenden Sie:
Beispielausgabe:
Nervenzusammenbruch:
findstr
‚s regex richtig funktioniert tatsächlich. Ihr Problem ist die Flucht . (Siehe Robs Referenz für Details.)Sichern Sie zuerst die gesamte Ausgabe mit
dir/o-d
.Stellen Sie als nächstes jede Zeile mit "
$Num:
" voranfindstr/n ^^
^
bedeutet, dass der Zeilenanfang übereinstimmt, und^^
ist einfach eine Escape-Version erforderlich, da wir uns in cmd befinden.Hinweis: Verwenden Sie
findstr
hierfür, dafind/n" "
Zeilen ohne Leerzeichen nicht übereinstimmen.Zuletzt beschneiden Sie die Ausgabe mit
findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
.^1[6-9]:
ist Regex für 16 bis 19.^[2-3][0-9]:
ist Regex für 20 - 39.^4[0-5]:
ist Regex für 40 bis 45.findstr "a b c"
Mittel und Wege finden Strings , die entweder Ausdrücke übereinstimmena
,b
oderc
.Siehe auch /programming//q/8844868/632951
quelle
findstr
kann nichts entfernen. Ich würde denken, Sie könnten in diesem Fall gezwungen sein, eine Schleife zu verwenden.Dies ist ein einzeiliger Befehl, ich hoffe, dass er auch für Sie funktioniert.
quelle