我有一个文件 example.txt 和一个字符串“Hi”以及第 15 行的开头。
findstr 所需的代码应该是:
findstr /b /n "Hi" "example.txt"
是否有东西可以仅在命令行(这里是第 15 行)中搜索“Hi”字符串。
请帮忙 !
答案1
如何使用 FINDSTR 在特定行中搜索?
findstr 所需的代码应该是:
findstr /b /n "Hi" "example.txt"
是否有东西可以仅在命令行中搜索“Hi”字符串
根据您问题的措辞,我将假设以下几点:
- 您只想在特定行上查找字符串,而不需要其他内容
- 由于您的示例
FINDSTR
使用了/B
“Hi”,因此字符串仅位于行首,后面跟着一个空格以容纳另一个单词,等等。 - 由于您的示例使用了
/N
swtich,我假设您只使用它来打印找到匹配字符串的行,这样您就可以运行 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
,使colon
和space
以及。然后它将仅按您的要求显示字符串(如果需要,可以用其他命令替换)。delimiter
token
2
ECHO
ECHO
答案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
读取量。