2014-03-31 64 views
1

之前,我有這種格式的TXT文件:
some text another uninteresting line // some more lines can come here [ actually interesting // this is the stuff I want ]批處理文件 - 刪除所有內容的某個字符

我希望能夠得到的方括號[](包括括號本身)之間的所有內容。

(因爲我知道在右括號後面沒有文字,只能刪除[ char之前的第一行就足夠了)。
我是漂亮當然我可以用findStr做到這一點,但並不確定如何。

+0

在字符上運行一個循環,每次遇到'[''時,都會在''''上輸出],填充緩衝區是最靈活的方法 – aelgoa

回答

1

您可以使用VBScript。以下內容作爲extract.vbs

flag=0 
Do While Not WScript.StdIn.AtEndOfStream 
    Line = WScript.StdIn.ReadLine() 
    If Left(Line,1)="[" Then flag=1 End If 
    If flag=1 Then 
     WScript.Stdout.WriteLine(Line) 
    End If 
Loop 

然後運行

CSCRIPT /NOLOGO EXTRACT.VBS < YOURFILE 

它設置一個標誌爲零,則每次讀取到最後輸入文件一行。如果遇到以「[」開頭的行,則設置標誌= 1。然後打印每次當標誌被設置爲1

如果要保存它找到的線路,在一個新的文件,像這樣運行它找到行:

CSCRIPT /NOLOGO EXTRACT.VBS <YOURFILE> NEWFILE 
+0

工作,容易理解並且帶有對傻瓜的解釋:) 謝謝! –

+0

快樂!很高興能幫上忙。 –

0
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "dataFile=data.txt" 

rem search the starting line 
    set "startLine=" 
    for /f "tokens=1 delims=:" %%a in (
     'findstr /l /b /n /c:"[" "%dataFile%"' 
    ) do if not defined startLine set "startLine=%%a" 

rem remove all lines before the starting one  
    if defined startLine for /f "tokens=1,* delims=:" %%a in (
     'findstr /n "^" "%dataFile%" ^& break ^> "%dataFile%"' 
    ) do if %%a geq %startLine% >>"%dataFile%" echo(%%b 

    endlocal 
0

如果你安裝一些工具從適當的操作系統(Unix/Linux操作系統),你可以不用任何代碼:

grep -A 999 \[ yourfile 

,說找了[字符yourfile和打印以及高達999線後(-A)它。 Unix Utils免費提供here

0

FINDSTR無法自行解決這個問題。

鑑於您可以簡單地刪除以[開頭的行之前的所有行,您所需要的只是以下本機批處理腳本。

@echo off 
setlocal 
for /f "delims=:" %%N in ('findstr /n [ "file.txt"') do if not defined N set /a N=%%N-1 
set "skip=" 
if %N% gtr 1 set "skip=skip=%N%" 
(for /f "usebackq %skip% delims=" %%A in ("file.txt") do echo %%A) >"newFile.txt" 

如果你知道你的文件不包含標籤,或者如果它是確定該標籤被轉換成一個空格字符串,那麼它更容易:

@echo off 
setlocal 
for /f "delims=:" %%N in ('findstr /n [ "file.txt"') do if not defined N set /a N=%%N-1 
more +%N% "file.txt" >"newFile.txt" 

的解決方案是一個如果您使用REPL.BAT - 一個混合的JScript /批處理實用工具,執行正則表達式搜索並替換stdin並將結果寫入標準輸出,則可以使用一個劃線。這是純粹的腳本,可以從XP以後的任何現代Windows機器上本機運行。

假設[只出現一次,則:

type "file.txt" | repl "[^[]*\[" "[" m >"newFile.txt" 

它甚至簡單支持方括號之間的多個塊,其中[和/或]可能是一條線的中間:

type "file.txt" | repl "[^[]*(\[[\s\S]*?\])[^[]*" "$1\r\n" mx >"newFile.txt" 
相關問題