找到&替换文件夹

时间:2016-08-19 19:53:17

标签: batch-file sublimetext2

我想知道是否有人可以提供帮助。

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

no: 734
word=achieving
def:
LinkToAnother=achieving

no: 657
word=accumulating
def:
LinkToAnother=accumulating

Original state of the text within the files

我如何使用Search&使用Sublime替换(使用Regex)多个文件或作为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

我正在努力解决如何在文本文件中仅选择我想要的第二个字符实例的问题。非常感谢这里的任何帮助。

3 个答案:

答案 0 :(得分:0)

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

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

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

保留回车(\r)字符。

答案 1 :(得分:0)

试试这个:

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

如果这个灵魂太慢,那么有几个修改可以帮助加快它。

答案 2 :(得分:0)

由于您在Sublime Text中询问如何执行此操作,因此以下RegEx模式在“查找”对话框中适用于我:

查找: files/

替换: ^((?:word|LinkToAnother).*)(ing)$

如果您想忽略键名,请改用$1

<强>击穿

  • ^(.*)(ing)$ - 以多行模式开始字符串或行首
  • 首先捕获组(将^):
    • $1 - (?:...)word
    • 的被动(非捕获)群组
    • LinkToAnother - 任何字符中的0个或更多(新行除外)
  • .* - (ing)的第二个捕获组(将ing
  • $2 - 字符串结尾或多行模式中的行尾

由于我们仅在第一个捕获组之后,$被放入替换字段