Wie kann man mit FINDSTR in einer bestimmten Zeile suchen?

6008
Ekagra Sinha

Ich habe eine Datei example.txt und eine Zeichenfolge "Hi" und den Anfang der 15. Zeile.

Der erforderliche Code für findstr sollte lauten:

findstr /b /n "Hi" "example.txt" 

Gibt es etwas, das nur in der Befehlszeile (Here 15) nach "Hi" suchen kann.

Bitte helfen Sie!

2
Funktioniert hier gut. Bitte [bearbeiten] Sie Ihre Frage mit "example.txt", damit wir etwas testen können. DavidPostill vor 8 Jahren 1
@ DavidPostill Er war nicht so klar, aber er sagt, er möchte nur eine Zeile durchsuchen. Der Befehl, den er kennt, durchsucht die gesamte Datei barlop vor 8 Jahren 0
@ barlop Hmm. Das macht wirklich keinen Sinn. Warum nur nach der 15. Zeile suchen, wenn Sie bereits wissen, dass sie sich in der 15. Zeile befindet? DavidPostill vor 8 Jahren 0
@DavidPostill Was ist, wenn Sie es nicht wissen und Sie prüfen möchten, ob es sich in der 15. Zeile befindet? barlop vor 8 Jahren 0
@barlop Wenn du was nicht weißt? Er sagte bereits, es sei in der 15. Zeile "Ich habe eine Datei example.txt und eine Zeichenfolge" Hi "und den Anfang der 15. Zeile." DavidPostill vor 8 Jahren 0
@ barlop Will er am Anfang einer Zeile nach einem String "Hi" suchen und nur dann "true" zurückgeben, wenn es sich um die 15. Zeile handelt? Die Frage ist völlig unklar. Jede Antwort ist nur Vermutung. DavidPostill vor 8 Jahren 0
@DavidPostill gut vermutlich, wenn er sagt, dass er den Anfang der 15. Zeile hat, bedeutet er nicht, dass er weiß, dass er dort ist, ansonsten gibt es keinen Sinn zu suchen. Es sieht so aus, als wollte er die 15. Zeile durchsuchen. Ob er nur zu Beginn prüfen will oder nicht, ist nicht so wichtig, denn jeder, der antworten kann, wie er die 15. Zeile durchsucht, kann auch sagen, dass er nur den Anfang der Zeile suchen möchte, um ein Caret hinzuzufügen ( Regex-Symbol für den Anfang einer Zeile) und lassen Sie es einfach den Anfang betrachten, den sie in ihrer Antwort leicht abdecken können. barlop vor 8 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/33523/discussion-between-barlop-and-davidpostill). barlop vor 8 Jahren 0
@ barlop Wir stimmen also zu, dass die Frage als "unklar, was Sie fragen" geschlossen werden sollte DavidPostill vor 8 Jahren 0
@LMFAO_A_JOKE Sie wissen nicht, wer dafür gestimmt hat - ich habe nicht .. und ich habe ihn auch nicht nach einem Beispiel gefragt. barlop vor 8 Jahren 0
@LMFAO_A_JOKE Ja, ich kann sehen, was alle geschrieben haben, und ich habe dem Fragesteller keine Chance gegeben. Und "yacking", es wird für weiteres "Rauschen / yacking" gemacht, wenn Sie (oder David oder ich oder irgendjemand) Kommentare hinzufügen, nachdem ein Chat-Link, der für weitere Kommentare erstellt wurde, automatisch bereitgestellt wurde. Verwenden Sie also den Chat-Link, den das automatisierte System des Superbenutzers bereitstellt. Ich werde auch. barlop vor 8 Jahren 0

2 Antworten auf die Frage

1
Pimp Juice IT

Wie kann man mit FINDSTR in einer bestimmten Zeile suchen?

Der erforderliche Code für findstr sollte lauten:

findstr /b /n "Hi" "example.txt"

Gibt es etwas, das nur in der Befehlszeile nach "Hi" suchen kann

Basierend auf dem Wortlaut Ihrer Frage werde ich einige Dinge annehmen:

  1. Sie möchten NUR einen String und nichts weiter in einer bestimmten Zeile
  2. Da Ihr Beispiel FINDSTRdie /BSie-Zeichenfolge von "Hi" verwendet, steht nur am Anfang der Zeile und dann folgt ein Leerzeichen für ein anderes Wort usw.
  3. Da Ihr Beispiel das /Nswtich verwendet, gehe ich davon aus, dass Sie es nur verwenden, um die Zeilen zu drucken, in denen die übereinstimmenden Zeichenfolgen gefunden werden, so dass Sie den FINDSTRBefehl ausführen können, um dann NUR Zeile 15 zu erhalten.

Hier sind einige Beispielbefehle (nicht Batch), die ausgeführt werden sollen, um dies auszuführen

(Sie können alle diese Zeilen einfach kopieren und einfügen, sobald Sie die Variablen entsprechend eingefügt haben, um ein Batch-Skript auszuführen.)

SET SearchFile=C:\Path\example.txt SET TmpSearchFile=%Temp%\~tmpSearch00.txt SET String=Hi SET LineNum=15  FINDSTR /B /N "%String%" "%SearchFile%" > "%TmpSearchFile%" FOR /F "USEBACKQ TOKENS=2 DELIMS=: " %A IN (`"FINDSTR /B "%LineNum%:%String%" "%TmpSearchFile%""`) DO ECHO %~A 

Dies führt im Wesentlichen die erste FINDSTRZeile mit der Zeilennummer der übereinstimmenden Zeichenfolge am Anfang aller Zeilen in eine temporäre Datei (falls vorhanden, wird sie überschrieben). Anschließend wird die temporäre Datei nach der Zeichenfolge der Zeilennummer sowie einem Doppelpunkt und der Zeichenfolge (dh "15: Hi") durchsucht. Anschließend habe ich eine FOR /FSchleife der Herstellung colonund spacedie delimitermit einem tokenvon 2. ECHODie Zeichenfolge wird dann NUR bei Ihrer Anfrage angezeigt ( ECHOggf. durch einen anderen Befehl ersetzen ).

Wow, diese Antwort wurde heute gerade akzeptiert. Das ist ein Rekord für mich von der Zeit bis zu der Zeit, zu der ich geantwortet habe. Fügen Sie einfach den Kommentar als Referenz für meine persönliche FYI hinzu Pimp Juice IT vor 5 Jahren 0
0
jimbobmcgee

Ich würde das nicht mit Batch machen, aber vielleicht mit Powershell.

Um festzustellen, ob die 15. Zeile einer Datei mit der Zeichenfolge 'Hi' begann, würde ich Folgendes verwenden:

if (Get-Content -Path x:\pathto\file.txt -First 15 ` | Select-Object -Last 1 ` | Select-String -Pattern '^Hi' -Quiet) { # do my thing here... } 

Dadurch sollte sichergestellt werden, dass nicht die gesamte Datei gelesen wird, sondern nur die ersten 15 Zeilen.

Natürlich ist die 15. Zeile beliebig. Je nachdem, wo Sie tatsächlich suchen möchten, möchten Sie möglicherweise die Parameter anpassen Get-Contentund Select-Objectdie Anzahl der Lesevorgänge reduzieren.