在文件夹内的多个文本文件中查找和替换
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>(?:...)
- word
或 LinkToAnother
的被动(非捕获)组
.*
- 0 个或多个任意字符(新行除外)
(ing)
- ing
的第二个捕获组(将是 </code>)</li>
<li><code>$
- 字符串结尾,或多行模式中的行结尾
因为我们只是在第一个捕获组之后,
被放入 Replace 字段
不知道有没有人可以帮忙
我有大量包含相同类型信息的文本文件。下面是两个示例,所有文件包含 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>(?:...)
-word
或LinkToAnother
的被动(非捕获)组
.*
- 0 个或多个任意字符(新行除外)
(ing)
- ing
的第二个捕获组(将是 </code>)</li>
<li><code>$
- 字符串结尾,或多行模式中的行结尾因为我们只是在第一个捕获组之后, 被放入 Replace 字段