在文件夹内的多个文本文件中查找和替换

Find & Replace in multiple text files within a folder

不知道有没有人可以帮忙

我有大量包含相同类型信息的文本文件。下面是两个示例,所有文件包含 4 行:

no: 734
word=achieving
def:
LinkToAnother=achieving

no: 657
word=accumulating
def:
LinkToAnother=accumulating

如何使用 Sublime 或作为替代的 dos 批处理文件脚本在多个文件中使用搜索和替换(使用正则表达式)?它应该用字母 (e) 替换第四行 (ing) 的最后三个字母,从而实现以下内容:

no: 734
word=achieving
def:
LinkToAnother=achieve

no: 657
word=accumulating
def:
LinkToAnother=accumulate

我很头疼如何在文本文件中只 select 我想要的字符的第二个实例。非常感谢这里的任何帮助。

如果您通过 MSYS 或 WINSED 安装 sed,您可以执行以下操作

sed -b -i -e "4s/ing\(\s*\)$/e/"

它打开所有 *.txt 个文件(当前目录)并编辑第 4 行以替换以 ing 结尾的文件并更改为 e.

回车 return (\r) 个字符被保留。

试试这个:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.txt) do (
   (for /L %%i in (1,1,4) do set /P "line[%%i]=") < "%%a"
   (for /L %%i in (1,1,3) do echo !line[%%i]!
    echo !line[4]:~0,-3!e) > "%%a"
)

即:"replace the last three letters of the fourth line with the letter (e)".

如果这个解决方案太慢,有几个修改可以帮助加快速度。

既然你问的是如何在 Sublime Text 中做到这一点,下面的 RegEx 模式在“查找”对话框中对我有用:

查找: ^((?:word|LinkToAnother).*)(ing)$

替换: </code></p> <p>如果您想忽略键名,请改用 <code>^(.*)(ing)$

细分:

  • ^ - 字符串开头,或多行模式中行的开头
  • 第一个捕获组(将是 </code>): <ul> <li><code>(?:...) - wordLinkToAnother
  • 的被动(非捕获)组
  • .*- 0 个或多个任意字符(新行除外)
  • (ing) - ing 的第二个捕获组(将是 </code>)</li> <li><code>$ - 字符串结尾,或多行模式中的行结尾
  • 因为我们只是在第一个捕获组之后, 被放入 Replace 字段