cmd文本搜索&打印

时间:2014-09-16 14:22:47

标签: sorting text cmd

我的任务是从文本文件中提取一些数据,我想知道是否有人知道我的问题的快速cmd方法。

我需要搜索的文件非常大,包含重复记录。 我要做的是搜索一行文字,说: ' searchForThisLineOfText'

然后,当找到它时,从该文本转到下一行,并将该行写入文件。

因此该文件的内容看起来像这样:

searchForThisLineOfText

563473

someOtherLine

34583933

anotherline

2342

searchForThisLineOfText

3424

someOtherLine

34583933

anotherline

2342

由此,我想将数字 563473 3424 写入文件。

有人对如何做到这一点有任何想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

这假设空白行实际上不在文本文件中。

@echo off
type "file.txt" | findrepl "searchForThisLineOfText" /o:1:1 >"newfile.txt"
pause

这使用名为findrepl.bat的助手批处理文件(由aacini提供) - 从以下网址下载:https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

findrepl.bat放在与批处理文件相同的文件夹中或路径上。

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL
SET "found="
(
 FOR /f "delims=" %%a IN (q25871330.txt) DO (
  IF DEFINED found ECHO %%a
  IF "%%a"=="searchForThisLineOfText" (SET "found=Y") ELSE (SET "found=")
 )
)>newfile.txt

GOTO :EOF

我使用了一个名为q25871330.txt的文件,其中包含我的测试数据。

制作newfile.txt

答案 2 :(得分:1)

这将生成一个临时文件,其中包含需要检索的行数,然后检索所需的行

@echo off
    setlocal enableextensions enabledelayedexpansion

    rem We will need a temporary file
    set "tempFile=%temp%\%~nx0.%random%.tmp"

    rem Get the number of the lines that we need to retrieve
    (
        for /f "delims=:" %%a in ('
            findstr /n /l /c:"searchText" "data.txt"
        ') do ( set /a "n=%%a+1" & echo(!n!:)
    )>"%tempFile%" 

    rem Retrieve the indicated lines to the output file
    (
        for /f "tokens=1,* delims=:" %%a in ('
            findstr /n /r /c:"^" "data.txt" 
            ^| findstr /b /l /g:"%tempFile%"
        ') do echo(%%b
    )>"outputFile.txt"

    rem Remove the temporary file
    del "%tempFile%" > nul 2>nul