从命令行替换正则表达式

从命令行替换正则表达式

是否可以通过命令行进行正则表达式替换?目前,我正在使用 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 [Windows CMD]

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

相关内容