正则表达式从命令行替换


21

是否可以从命令行进行正则表达式替换?现在,我正在使用notepad ++执行此操作。在命令行中,我只能使用FINDSTR,而只能找到修补的文件/行。

编辑:
也许可以制作一个VB脚本并从cmd运行它吗?我刚刚创建了包含内容的文件“ hi.vbs”

Msgbox "Hi Buddy"

然后,cmd允许我通过从命令行键入“ hi”直接运行它。
因此,如果无法使用批处理脚本,那么我可以使用VB脚本通过批处理。要么..?


最后,您输入了一个不确定的句子,整个EDIT部分并未指出问题,更像是“我在vb中创建了一个hello世界,我可以批量创建类似的东西吗?请检查@IanPugsley发表的答案是进行正则表达式替换的简单方法
mjsr 2011年

@Aziz:这些答案对您有用吗?如果是这样,您会接受吗?这是参与该社区的一部分;我们互相感谢的方式。给出的可接受答案的信誉点可帮助其他用户评估彼此的体验。谢谢。
罗伯特·罗伯特(JRobert)2011年

我正在考虑从命令行调用诸如MYVBREPLACE(.vbs)FILENAME REGEXPATTERN REPLACEMENT之类的东西。
阿齐兹(Aziz)

Answers:


11

转到此处
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


惊人的疯狂工具!!!这个工具太先进了。我还无法使用它,但是当我阅读gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command时,我发现它可以做的比我预期的要多得多。非常感谢
Aziz '10

bash的新版本还可以执行正则表达式,有时对于简单的任务就足够了,甚至不需要使用sed。
vtest

并重新测试一下vtest的内容,以防万一没人知道。cygwin重击。
barlop

sed用多行替换
吸吮

1
@KennyEvitt cmd shell需要进行一些调整才能显示和使用chcp来用于Unicode utf8 chcp 65001(如您所说,不支持utf16 encoding.chcp 1200和chcp 12001) stackoverflow.com/questions/9321419/… 不确定薄荷 不确定是否重新安装Powershell。但是在cmd或powershell中可以支持utf-8。只要使用诸如courier new这样的支持字体,并且只要其代码页为65001。utf16编码就有一个cmd / u。
barlop

26

我已经为Windows编写了一个免费的命令行工具来执行此操作。它称为rxrepl,它支持Unicode和文件搜索。有些人可能会发现它是一个有用的工具。

rxrepl是Microsoft Windows命令行工具,用于使用与Perl兼容的正则表达式(PCRE)搜索和替换文本文件中的文本。

它具有以下功能:

  • 使用与Perl兼容的正则表达式进行搜索
  • 在替换文字中使用组匹配
  • 支持Windows和Unix行尾
  • Unicode支持
  • 接受多个搜索/替换参数
  • 选项可以在选项文件中提供
  • 扫描文件
  • 预览模式
  • 行和全文件匹配模式

在此处输入图片说明


4
这真太了不起了!如果您像我一样需要示例,可以在文件中将“ foobar”替换为“ foofighters”:rxrepl.exe -f file.txt -a -s“(foo)bar” -r“ \ 1fighters”
Dunc

1
另外,您是否会碰巧在github之类的源代码上?如果不打算开源,那完全可以理解,但是我很好奇。
kayleeFrye_onDeck

1
@Steztric真的吗?我运行64位Windows和似乎从运行此没有任何问题C:\WINDOWS\System32\cmd.exe
kayleeFrye_onDeck

1
很棒的工具!在Windows Server Std 2012 R2 x64下运行没有问题。谢谢!
kwrl

2
很棒的工具,我希望您仍在维护它
水汪汪的,

12

脚本专家介绍了如何在PowerShell中执行此操作(在最新的Windows操作系统上没有其他下载,您可能已经安装了它)。

启动它,运行以下命令(将替换*@):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

它支持.NET正则表达式,包括正向和负向提前查找,以及6.x版之前regex不支持的所有形式的notepad ++(与我喜欢notepad ++一样)。


1
Notepad ++从版本6开始支持完整的PCRE。–
Bob

5

我已经找到了fnr.exe。它具有GUI和命令行。

一个开源工具,用于查找和替换多个文件中的文本。

特征

  • 单个文件下载-fnr.exe(127kb)
  • 使用Windows应用程序或通过命令行替换多个文件中的文本
  • 仅查找以查找匹配项
  • 区分大小写的搜索
  • 在一个目录或递归子目录中搜索文件
  • 常用表达
  • 查找和替换多行文字
  • 生成命令行按钮以创建命令行文本以放入批处理文件
  • 命令行帮助
  • 查找/替换引擎的单元测试

查看命令行选项

在此处输入图片说明


1
非常好-您可以在GUI中检查“ find”语句,单击“ Gen Replace Command Line”并准备使用命令行调用。无需花费时间来熟悉命令行语法。
sarh 2015年

进行更改后,我无法使它退出。我必须按ENTER键关闭使这不是特别有用的脚本
G-。

@G-。如果从批处理文件运行<enter>,则无需等待。
塞尔吉斯(Sergius)

我找不到输出到其他文件名/扩展名的方法
Rick

4

看起来您可以在FINDSTR中使用正则表达式

findstr [Windows CMD]

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

谢谢您的回答,但这不是我的问题。
阿齐兹(Aziz)

2
findstr无法替换文件中的文本!
肯尼·埃维特

4

我参加聚会有点晚了,但是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答案。


3

Cygwin是两个不错的选择,它将为您提供一个类似Unix,bash的环境(替代cmd.exe)。和Unxutils,是单个Unix实用程序集合的Win32端口。在任一软件包中,请参见“ sed”,“ awk”和“ grep”。


2
unxutils很旧。现在是
gnuwin32

谢谢JRobert的建议。抱歉,我没有理解,但是现在我可以看到SED就是问题。
阿齐兹(Aziz)

@barlop截至2018年,gnuwin32现在也很旧。.cygwin是最新的!
barlop

0

您也可以使用GSAR执行命令行搜索和替换。也适用于十六进制和二进制。它不会执行正则表达式可以执行的复杂繁重的工作,但是对于基本的搜索和替换,它可以快速轻松地完成工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.