是否可以通过命令行进行正则表达式替换?目前,我正在使用 notepad++ 来执行此操作。在命令行中,我只能使用 FINDSTR,它只能定位匹配的文件/行
编辑:
也许可以制作一个 VB 脚本并从 cmd 运行它?我刚刚创建了一个文件“hi.vbs”,内容如下
Msgbox "Hi Buddy"
然后 cmd 允许我通过在命令行中输入“hi”来直接运行它。
因此,如果使用批处理脚本无法做到这一点,那么我可以通过批处理使用 VB 脚本。或者……?
答案1
到这里
http://gnuwin32.sourceforge.net/packages.html
向下滚动到 SED。同时下载 coreutils。
此命令将全局以及在每一行上用 b 替换 a。因此不仅仅是该行上第一次出现的 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
答案2
我为 Windows 编写了一个免费的命令行工具来执行此操作。它叫做复制代码,它支持 Unicode 和文件搜索。有些人可能会发现它是一个有用的工具。
rxrepl 是一个 Microsoft Windows 命令行工具,使用 Perl 兼容正则表达式 (PCRE) 在文本文件中搜索和替换文本。
它具有以下特点:
- 使用 Perl 兼容正则表达式进行搜索
- 在替换文本中使用组匹配
- 支持 Windows 和 Unix 行尾
- Unicode 支持
- 接受多个搜索/替换参数
- 可以在选项文件中提供选项
- 扫描文件
- 预览模式
- 行和完整文件匹配模式
答案3
脚本专家封面如何在 PowerShell 中执行此操作(在最新的 Windows 操作系统上无需额外下载,您可能已经安装了它)。
启动它,运行以下命令(将 a 替换*
为 a @
):
(Get-Content C:\Scripts\Test.txt) |
Foreach-Object {$_ -replace "\*", "@"} |
Set-Content C:\Scripts\Test.txt
这支持.NET 正则表达式,包括正向和负向前瞻,以及 notepad++ 在 6.x 版本之前的正则表达式所不支持的所有事物(尽管我很喜欢 notepad++)。
答案4
看起来您可以将正则表达式与 FINDSTR 一起使用
findstr 允许搜索文本(如文件 file-name 中用模式指定的文本)。如果 file-name 包含通配符(* 或 ?),它会搜索所有匹配的文件。选项 /S 在当前目录及其子目录中搜索。如果模式包含空格,则必须像 /C:“some text to be searched”这样指定。为了将模式转换为正则表达式,必须使用 /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