Как использовать FINDSTR для поиска по определенной строке?

5730
Ekagra Sinha

У меня есть файл example.txt и строка «Привет» и начало 15-й строки.

Требуемый код для findstr должен быть:

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

Есть ли что-то, что может искать строку «Hi» только в заданной строке (здесь 15-й).

Пожалуйста помоги !

2
Здесь отлично работает. Пожалуйста, [отредактируйте] свой вопрос, чтобы включить "example.txt", чтобы у нас было что проверить. DavidPostill 8 лет назад 1
@DavidPostill Он не был настолько ясен, но он говорит, что хочет искать только одну строку. Команда, которую он знает, будет искать весь файл barlop 8 лет назад 0
@ barlop Хмм. Это действительно не имеет никакого смысла. Зачем искать только 15-ю строку, если вы уже знаете, что она находится на 15-й строке? DavidPostill 8 лет назад 0
@DavidPostill, что если вы не знаете, и хотите проверить, находится ли он на 15-й строке? barlop 8 лет назад 0
@ barlop Если ты не знаешь что? Он уже сказал, что это в 15-й строке: «У меня есть файл example.txt, строка« Привет »и начало 15-й строки». DavidPostill 8 лет назад 0
@barlop Хочет ли он искать строку «Привет» в начале строки и возвращать только true, если это 15-я строка? Вопрос совершенно неясен. Любой ответ просто угадай. DavidPostill 8 лет назад 0
@DavidPostill вполне вероятно, когда он говорит, что у него есть начало 15-й строки, он не означает, что он знает, что это там, иначе нет смысла искать. Похоже, он хочет найти 15-ю строку. Теперь, если он хочет проверить только в начале или нет, это не имеет большого значения, потому что любой, кто может ответить на вопрос, как искать 15-ю строку, может также сказать, что если он хочет искать только начало строки, то добавьте каретку ( Символ регулярного выражения для соответствия началу строки) и заставляет его смотреть только начало, они могут легко охватить это в своем ответе. barlop 8 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/33523/discussion-between-barlop-and-davidpostill). barlop 8 лет назад 0
@ barlop Итак, мы согласны, что вопрос должен быть закрыт как «неясно, что вы спрашиваете» DavidPostill 8 лет назад 0
@LMFAO_A_JOKE вы не знаете, кто проголосовал за его закрытие - я не ... и я не просил его привести пример. barlop 8 лет назад 0
@LMFAO_A_JOKE Да, я вижу, что все написали, и я не давал возможность спрашивающему. И «якинг», это создает дополнительный «шум / якинг», когда вы (или Дэвид, или я, или кто-либо еще) добавляете комментарии после того, как автоматически была предоставлена ​​ссылка для чата, созданная для дальнейших комментариев. Так что используйте ссылку на чат, предоставленную автоматизированной системой суперпользователя. Я тоже буду. barlop 8 лет назад 0

2 ответа на вопрос

1
Pimp Juice IT

How to use FINDSTR to search in a specific line?

The required code for findstr should be:

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

Is there something that can search for "Hi" string only in the commanded line

Based on the wording of your question, I'm going to assume a few things:

  1. You want to find a string ONLY and nothing more on a specific line
  2. Since your example FINDSTR uses the /B you string of "Hi" is at the begginning of the line only and then followed by a space for another word, etc. after it.
  3. Since your example uses the /N swtich, I'm going to assume you only use it to print the lines which the matched strings are found so you can then run about FINDSTR command to then get ONLY line 15.

Here are some example commands (not batch) to run to perform this

(You can simple copy and paste all these lines once you variable are plugged in accordingly to run without being a batch script.)

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 

This basically pipes the first FINDSTR with the line number of the matching string at the beginning of all lines to a temp file (if it exists, it is overwritten). It then searches that temp file for the string of the line number, plus a colon and the string (i.e. "15:Hi"). Afterwards, I used a FOR /F loop making the colon and a space the delimiter with a token of 2. It will then ECHO the string ONLY as you request (replace ECHO with some other command if needed).

Вау, этот ответ был только что принят сегодня; это запись для меня с момента, когда я ответил, до времени, принятого. Просто добавив комментарий для справки в этом отношении для моего личного FYI Pimp Juice IT 5 лет назад 0
0
jimbobmcgee

Я бы не стал делать это с партией, но мог бы с Powershell.

Чтобы определить, началась ли 15-я строка файла со строки «Привет», я бы использовал:

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

Это должно гарантировать, что весь файл не читается, только первые 15 строк.

Конечно, 15-я строка произвольна. В зависимости от того, где вы на самом деле хотите посмотреть, вы можете настроить параметры Get-Contentи Select-Objectуменьшить количество операций чтения.

Похожие вопросы