查找并替换文件夹中的多个文本文件

问题描述:

我想知道是否有人可以提供帮助。查找并替换文件夹中的多个文本文件

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

no: 734 
word=achieving 
def: 
LinkToAnother=achieving 

no: 657 
word=accumulating 
def: 
LinkToAnother=accumulating 

Original state of the text within the files

我如何使用搜索&使用崇高或作为替代DOS批处理文件脚本在多个文件中替换(使用正则表达式)?它应该用字母代替第四行(ing)的最后三个字母(e),因此实现以下目标:

no: 734 
word=achieving 
def: 
LinkToAnother=achieve 

no: 657 
word=accumulating 
def: 
LinkToAnother=accumulate 

The outcome of the text within the files

我有一个头痛试图找出如何只在文本文件中选择我想要的字符的第二个实例。非常感谢这里的任何帮助。

试试这个:

@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)取代第四行的最后三个字母”。

如果这个灵魂太慢了,有几个修改可以帮助加快速度。

+0

嗨Aacini,谢谢哟你这个工作。但是,如何调整它,以便它只在那些以特定的最后三个字符(“ing”)结尾而不是最后三个字符结束的行上执行任务。因此我可以适应其他情况。 –

如果安装通过MSYS的sed或WINSED你可以做以下

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

它打开所有*.txt文件(当前目录)和编辑四号线,以取代ing结尾的文件并更改为e

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

既然你问如何在崇高的文本做到这一点,下面的正则表达式模式对我的作品在查找对话框:

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

替换:$1

如果您想忽略键名,请改用^(.*)(ing)$

击穿

  • ^ - 串的开始,或在多线图案线的开始
  • 第一捕获组(将$1):
    • (?:...) - 被动(非捕获)组wordLinkToAnother
    • .* - 0或多个任意字符(除新行)
  • (ing) - 用于ing秒捕获组(将$2
  • $ - 字符串的结束,或在多线图案
  • 线的端

由于我们只有第一个捕获组后,$1放入更换

+0

哇,谢谢idleberg这个作品,哪本书或网页会教我这个级别的regx?你能详细解释一下这里发生的事情吗? –

+0

我总是回到[RegEx Cheat Sheet](https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/),并在网站上测试我的模式,例如[RegExr](http ://regexr.com/)。顺便说一句,如果它有助于解决您的问题,请接受答案! – idleberg