如何使用 FINDSTR 在特定行中搜索?

如何使用 FINDSTR 在特定行中搜索?

我有一个文件 example.txt 和一个字符串“Hi”以及第 15 行的开头。

findstr 所需的代码应该是:

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

是否有东西可以仅在命令行(这里是第 15 行)中搜索“Hi”字符串。

请帮忙 !

答案1

如何使用 FINDSTR 在特定行中搜索?

findstr 所需的代码应该是:

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

是否有东西可以仅在命令行中搜索“Hi”字符串

根据您问题的措辞,我将假设以下几点:

  1. 您只想在特定行上查找字符串,而不需要其他内容
  2. 由于您的示例FINDSTR使用了/B“Hi”,因此字符串仅位于行首,后面跟着一个空格以容纳另一个单词,等等。
  3. 由于您的示例使用了/Nswtich,我假设您只使用它来打印找到匹配字符串的行,这样您就可以运行 aboutFINDSTR命令,然后仅获取第 15 行。

下面是执行此操作所需的一些示例命令(非批处理)

(一旦您将变量相应地插入,您就可以简单地复制并粘贴所有这些行,而无需使用批处理脚本来运行。)

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

这基本上将第一个FINDSTR与所有行开头的匹配字符串的行号一起通过管道传输到临时文件(如果存在,则将其覆盖)。然后,它会在该临时文件中搜索行号的字符串,加上冒号和字符串(即“15:Hi”)。之后,我使用了一个循环FOR /F,使colonspace以及。然后它将仅按您的要求显示字符串(如果需要,可以用其他命令替换)。delimitertoken2ECHOECHO

答案2

我不会使用批处理来执行此操作,但我可能会使用 Powershell。

要确定文件的第 15 行是否以字符串“Hi”开头,我将使用:

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读取量。

相关内容