我有一个巨大的文本文件,我想在两个特定单词之间删除它的某些部分。 e.g:
Lorem ipsum dolor sit amet,consectetuer adipiscing elit,sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat。 Ut wisi enim ad minim veniam, quis nostrud exercation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat。 Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat,vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi。 Nam liber tempor cum soluta nobis eleifend option congue nihil 不安的doming id quod mazim placerat facer possim assum。打字非 habent claritatem insitam;在iis qui facit eorum中使用了meus legentis claritatem。调查员展示了lectore legere me lius quod ii legunt saepius。 Claritas est etiam processus dynamicus,qui sequitur mutationem consuetudium lectorum。 Mirum est notare quam littera gothica。
删除“guis”和“gothica”之间的词语,它变为:
Lorem ipsum dolor sit amet,consectetuer adipiscing elit,sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat。 Ut wisi enim ad minim veniam, quis gothica 。
实际上在巨大的文件中有很多“gui”和“gothica”,我必须摆脱所有这些。
这可以通过一个简单的批处理脚本来实现,但我对这个主题很奇怪。 TIA,如果有人帮忙。
答案 0 :(得分:0)
这是我提出的最简单的解决方案,我确信它与特殊字符等问题有关,但与给定示例一起使用。我使用了文件名input.txt
和output.txt
。
@echo off
setlocal disableDelayedExpansion
set "FLAG=FALSE"
:: Define LF to contain a newline character
set LF=^
:: Do not remove above lines!
> output.txt (
for /f "eol= tokens=*" %%A in (input.txt) do (
set "ln=%%A"
setlocal enableDelayedExpansion
for %%L in ("!LF!") do (
for /f "eol= delims=., " %%W in ("!ln: =%%~L!") do (
if "%%W"=="quis" (
set "FLAG=TRUE"
<nul set /p=%%W
) else if "%%W"=="gothica" (
<nul set /p=%%W
set "FLAG=FALSE"
) else if "!FLAG!"=="FALSE" (
<nul set /p=%%W
)
)
)
endlocal
)
)
这会遍历每个单词并将其打印出来,直到找到quis
,并在找到gothica
后恢复打印。我使用<nul set /p=%%W
来回显而不打印换行符(请参阅第2和第3个链接),这会产生副作用,即在文件末尾打印出一个额外的空格,所以要注意这一点。
参考文献: