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