是否可以从命令行进行正则表达式替换?现在,我正在使用notepad ++执行此操作。在命令行中,我只能使用FINDSTR,而只能找到修补的文件/行。
编辑:
也许可以制作一个VB脚本并从cmd运行它吗?我刚刚创建了包含内容的文件“ hi.vbs”
Msgbox "Hi Buddy"
然后,cmd允许我通过从命令行键入“ hi”直接运行它。
因此,如果无法使用批处理脚本,那么我可以使用VB脚本通过批处理。要么..?
是否可以从命令行进行正则表达式替换?现在,我正在使用notepad ++执行此操作。在命令行中,我只能使用FINDSTR,而只能找到修补的文件/行。
编辑:
也许可以制作一个VB脚本并从cmd运行它吗?我刚刚创建了包含内容的文件“ hi.vbs”
Msgbox "Hi Buddy"
然后,cmd允许我通过从命令行键入“ hi”直接运行它。
因此,如果无法使用批处理脚本,那么我可以使用VB脚本通过批处理。要么..?
Answers:
转到此处
http://gnuwin32.sourceforge.net/packages.html
向下滚动到SED。随时下载coreutils。
此命令将在每一行上全局用b替换a。所以不仅是第一次出现在线。
例如使用sed“ s / a / b / g” a.txt
C:\>type a.txt
aaaa
aaa
C:\>sed "s/a/b/" a.txt
baaa
baa
C:\>sed "s/a/b/g" a.txt
bbbb
bbb
C:\>
VBScript确实支持正则表达式,您可以查找并替换它。
dim re, s
set re = new RegExp
re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")
显示bxxx dxxx xxx
我已经为Windows编写了一个免费的命令行工具来执行此操作。它称为rxrepl,它支持Unicode和文件搜索。有些人可能会发现它是一个有用的工具。
rxrepl是Microsoft Windows命令行工具,用于使用与Perl兼容的正则表达式(PCRE)搜索和替换文本文件中的文本。
它具有以下功能:
- 使用与Perl兼容的正则表达式进行搜索
- 在替换文字中使用组匹配
- 支持Windows和Unix行尾
- Unicode支持
- 接受多个搜索/替换参数
- 选项可以在选项文件中提供
- 扫描文件
- 预览模式
- 行和全文件匹配模式
C:\WINDOWS\System32\cmd.exe
脚本专家介绍了如何在PowerShell中执行此操作(在最新的Windows操作系统上没有其他下载,您可能已经安装了它)。
启动它,运行以下命令(将替换*
为@
):
(Get-Content C:\Scripts\Test.txt) |
Foreach-Object {$_ -replace "\*", "@"} |
Set-Content C:\Scripts\Test.txt
它支持.NET正则表达式,包括正向和负向提前查找,以及6.x版之前regex不支持的所有形式的notepad ++(与我喜欢notepad ++一样)。
我已经找到了fnr.exe。它具有GUI和命令行。
一个开源工具,用于查找和替换多个文件中的文本。
特征
- 单个文件下载-fnr.exe(127kb)
- 使用Windows应用程序或通过命令行替换多个文件中的文本
- 仅查找以查找匹配项
- 区分大小写的搜索
- 在一个目录或递归子目录中搜索文件
- 常用表达
- 查找和替换多行文字
- 生成命令行按钮以创建命令行文本以放入批处理文件
- 命令行帮助
- 查找/替换引擎的单元测试
看起来您可以在FINDSTR中使用正则表达式
findstr允许搜索文本(如文件文件名中用pattern所指定。如果文件名包含通配符(*或?),它将搜索所有匹配的文件。选项/ S在当前目录以及如果模式包含空格,则必须将其指定为/ C:“要搜索的某些文本”。为了将模式转换为正则表达式,必须使用/ R选项。/I选项搜索大小写不敏感。
从FindStr的帮助(Findstr /?
):
/ R-使用搜索字符串作为正则表达式。
Regular expression quick reference:
. Wildcard: any character
* Repeat: zero or more occurrences of previous character or class
^ Line position: beginning of line
$ Line position: end of line
[class] Character class: any one character in set
[^class] Inverse class: any one character not in set
[x-y] Range: any characters within the specified range
\x Escape: literal use of metacharacter x
\<xyz Word position: beginning of word
xyz\> Word position: end of word
findstr
无法替换文件中的文本!
我参加聚会有点晚了,但是JREPL.BAT是一个基于JScript / batch脚本的混合正则表达式实用程序,可以从XP开始在任何Windows计算机上本地运行。
完整的文档内置于脚本,它可以通过以下方式访问JREPL /?
,或使用JREPL /??
的分页输出。
JREPL使用JScript随附的标准ECMA正则表达式。ECMA regex的功能不如Powershell可用的.NET regex强大,但仍然相当不错。而且我认为普通用户会发现该实用程序比powershell易于使用。
内置的JREPL选项已经提供了很多固有的功能,但是注入用户提供的JScript的能力确实打开了惊人的可能性。
我开发脚本是因为我的工作场所不允许下载非标准exe文件,但是对编写批处理脚本或JScript脚本没有限制:-)
只需单击链接,然后将脚本代码复制到名为JREPL.BAT的文件中。阅读该线程的后续文章,以获取用法和开发历史的示例。也有许多使用JREPL.BAT的StackOverflow答案。