JREPL - 如何仅替换文本文件中的第二个匹配项?

JREPL - How to replace only the second match in a text file?

提问人:Mike0101 提问时间:9/4/2023 最后编辑:Mike0101 更新时间:9/16/2023 访问量:62

问:

是否可以告诉“JREPL.bat”仅替换文本文件中“[AddReg]”的第二个匹配项? 几天来,我一直试图找到解决方案,但失败了。

“JREPL.bat” 命令 /INC “3:7” 没有帮助,因为行号会根据文本文件变化太多。

CALL ".\JREPL.bat" "\[AddReg\]" "[AddReg]\r\nNewLine." /XSEQ /M /F "test.txt" /O "test1.txt"

[AddReg]
1TEST.
2TEST.
3TEST.
[AddReg]
1TEST.
2TEST.
3TEST.
[AddReg]
1TEST.
2TEST.
3TEST.
替换 匹配 xregexp jrepl multiple-occurrence

评论


答:

0赞 Aaron Meese 9/14/2023 #1

据我所知,没有本地方法可以使用 JREPL.bat 实现这一点。但是,如果愿意使用自定义批处理脚本来实现此目的,则可以执行以下操作:

@echo off
setlocal enabledelayedexpansion

set "input_file=test.txt"
set "output_file=test1.txt"
set "search_string=[AddReg]"
set "replace_string=[AddReg]\r\nNewLine."

set "count=0"

(for /f "tokens=*" %%a in (%input_file%) do (
    set "line=%%a"
    if !count! lss 2 (
        set "line=!line:%search_string%=%replace_string%!"
        if not "!line!"=="%%a" (
            set /a "count+=1"
        )
    )
    echo !line!
)) > %output_file%

endlocal

脚本将忽略第一个匹配项,替换第二个匹配项,然后退出循环。

0赞 Mike0101 9/16/2023 #2

原生的“JREPL.bat”不支持这一点,这很奇怪。但是我找到了解决这个问题的一个解决方案。欢迎更多想法。

CALL ".\JREPL.bat" "\[AddReg\]" "$txt=++counter==2?'[AddReg]\r\nMy Little Pony':$0" /JQ /F "test.txt" /O "test1.txt"