首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式搜索批量替换

问正则表达式搜索批量替换
EN

Stack Overflow用户
提问于 2011-08-11 17:14:18
回答 2查看 12K关注 0票数 3

我想在windows批处理中对一组文件执行正则表达式模式的搜索/替换。它将类似于:

代码语言:javascript
复制
if the regex matches a line matches then replace it with a new line.

另外,我需要在regex中添加一个变量来替换该值。有人知道如何处理批处理脚本吗?我不是很熟悉它。一些例子可能会有所帮助。

EN

回答 2

Stack Overflow用户

发布于 2011-09-03 23:50:35

您可以从findstr命令中获益。它支持语法受限的正则表达式。比如说,你有一些文件

代码语言:javascript
复制
ignore_me.txt
rename_me01.txt
rename_me02.txt
rename_me03.txt
rename_me04.txt

一条命令

代码语言:javascript
复制
dir /b | findstr "rename_me[0-9][0-9]"

将输出

代码语言:javascript
复制
rename_me01.txt
rename_me02.txt
rename_me03.txt
rename_me04.txt

好吧,不是很好的例子,因为你可以用老的?通配符来做这件事。我的观点是findstr的模式是一个正则表达式。

最近我遇到了类似的问题,但我厌倦了试图找出如何替换正则表达式模式。我甚至不确定是否可以仅使用本机Windows命令。因此,为了获得更简单但仍然是本机的解决方案,我引用了Windows Scripting Host。我的任务是查找名称中包含dd.mm.yyyy格式的日期的所有文件,并将该日期替换为当前日期。

它的脚本是:

代码语言:javascript
复制
<job>
    <script language="JavaScript">
        var d = new Date();
        // get current date for replacement
        var currDate = (d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear())
            // add leading zeros to date and month
            .replace(/^([0-9])\./g, '0$1.').replace(/\.([0-9])\./g, '.0$1.');
        var fso = new ActiveXObject("Scripting.FileSystemObject");  
        var files = new Enumerator(fso.getFolder(".").files);
        var count = 0;
        for (; !files.atEnd(); files.moveNext())
        {
            var file = ""+files.item(); // make it string
            if (file.match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/)) {
                var newName = file.replace(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/, currDate);
                fso.moveFile(file, newName);
                count++;
            }
        }
        WScript.echo("Renamed "+count+" files");
    </script>
</job>

将其以u.wsf名称保存,并放入这些文件的文件夹中。该扩展与wscript相关联,因此当双击文件时,它将在图形用户界面模式下运行,但也可以在命令行模式下运行:

代码语言:javascript
复制
cscript u.wsf
票数 2
EN

Stack Overflow用户

发布于 2011-09-04 00:07:24

Unix上的标准工具是sed和Perl。两者都有DOS/Windows端口。

代码语言:javascript
复制
A:\> sed -i "s/foo/bar/g" file1 file2 file3

A:\> perl -pi -e "s/foo/bar/g" file1 file2 file3

将命名文件中的"foo“替换为"bar”。-i是一种成熟的编程语言,它的正则表达式功能集要好得多,但对于简单的一次性工作来说,这两种方法都可以。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7023460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档