查找并替换文件夹中的多个文本文件
我想知道是否有人可以提供帮助。查找并替换文件夹中的多个文本文件
我有大量的文本文件具有相同类型的信息。下面是两个例子,所有的文件包含4行:
no: 734
word=achieving
def:
LinkToAnother=achieving
no: 657
word=accumulating
def:
LinkToAnother=accumulating
我如何使用搜索&使用崇高或作为替代DOS批处理文件脚本在多个文件中替换(使用正则表达式)?它应该用字母代替第四行(ing
)的最后三个字母(e
),因此实现以下目标:
no: 734
word=achieving
def:
LinkToAnother=achieve
no: 657
word=accumulating
def:
LinkToAnother=accumulate
我有一个头痛试图找出如何只在文本文件中选择我想要的字符的第二个实例。非常感谢这里的任何帮助。
试试这个:
@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"
)
那就是: “用字母(E)取代第四行的最后三个字母”。
如果这个灵魂太慢了,有几个修改可以帮助加快速度。
如果安装通过MSYS的sed或WINSED你可以做以下
sed -b -i -e "4s/ing\(\s*\)$/e\1/"
它打开所有*.txt
文件(当前目录)和编辑四号线,以取代ing
结尾的文件并更改为e
。
回车(\r
)字符被保留。
既然你问如何在崇高的文本做到这一点,下面的正则表达式模式对我的作品在查找对话框:
查找:^((?:word|LinkToAnother).*)(ing)$
替换:$1
如果您想忽略键名,请改用^(.*)(ing)$
。
击穿:
-
^
- 串的开始,或在多线图案线的开始 - 第一捕获组(将
$1
):-
(?:...)
- 被动(非捕获)组word
或LinkToAnother
-
.*
- 0或多个任意字符(除新行)
-
-
(ing)
- 用于ing
秒捕获组(将$2
) -
$
- 字符串的结束,或在多线图案 线的端
由于我们只有第一个捕获组后,$1
放入更换场
哇,谢谢idleberg这个作品,哪本书或网页会教我这个级别的regx?你能详细解释一下这里发生的事情吗? –
我总是回到[RegEx Cheat Sheet](https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/),并在网站上测试我的模式,例如[RegExr](http ://regexr.com/)。顺便说一句,如果它有助于解决您的问题,请接受答案! – idleberg
嗨Aacini,谢谢哟你这个工作。但是,如何调整它,以便它只在那些以特定的最后三个字符(“ing”)结尾而不是最后三个字符结束的行上执行任务。因此我可以适应其他情况。 –