删除包含特定字词的行之间的内容 - 在文本文档中

时间:2016-09-22 14:09:09

标签: batch-file text-files

我有一个巨大的文本文件,我想在两个特定单词之间删除它的某些部分。 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,如果有人帮忙。

1 个答案:

答案 0 :(得分:0)

这是我提出的最简单的解决方案,我确信它与特殊字符等问题有关,但与给定示例一起使用。我使用了文件名input.txtoutput.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个链接),这会产生副作用,即在文件末尾打印出一个额外的空格,所以要注意这一点。

参考文献: