【问题标题】:Windows Command Line: Search and replace valueWindows 命令行:搜索和替换值
【发布时间】:2025-12-29 05:50:16
【问题描述】:

我正在尝试查找和替换文本文件中某些内容的值,但无法弄清楚我将如何做到这一点。

例如,我想进入一个具有 android:versionName="1.53" 的文件并将其替换为 android:versionName="1.54"。

如果我只想用 1.54 替换 1.53,我知道该怎么做,例如,使用名为 FART(查找和替换文本)的程序,但我希望能够用 1.54 替换语音标记之间的任何内容,即不必指定 1.53,因为这可能每次都会改变。

另一个类似的例子是将#define DLS_VERSION (1540) 替换为#define DLS_VERSION (1600)。

我只是想知道是否有标准的方法或实用程序可以做到这一点?

谢谢, 克里斯。

【问题讨论】:

  • SED 是一个流编辑器,它使用正则表达式从命令行编辑文本文件。具有类似功能的本机 Windows 批处理文件是来自 Stack Overflow 的 dbenham 的 REPL.BAT。它们都是强大的方法,因为普通批处理文件可能会受到要更改的文件的构成的限制。

标签: windows command-line replace command find


【解决方案1】:

任何正则表达式 (regex) 搜索和替换实用程序都应该可以正常工作。 Windows 有许多免费选项,但没有一个是批处理原生的。

一个不错的选择是REPL.BAT - a hybrid JScript/batch utility,它适用于从 XP 开始的任何 Windows 机器,并且不需要下载或安装任何可执行文件。

假设 REPL.BAT 位于当前目录中,或者更好的是,位于 PATH 中的某个位置:

type "yourFile.txt"|repl "(android:versionName=\q).*?(\q)" "$11.54$2" x >"yourFile.txt.new"
move /y "yourFile.txt.new" "yourFile.txt" >nul

type "yourFile.txt"|repl "(#define DLS_VERSION \().*?(\))" "$11600$2" >"yourFile.txt.new"
move /y "yourFile.txt.new" "yourFile.txt" >nul

完整的文档嵌入在 REPL.BAT 脚本中。一个简单的网络搜索可以找到许多解释正则表达式的网站。

【讨论】:

  • 抱歉,我不小心将最后一条评论编辑了 5 次,因此无法再编辑。哇,谢谢dbenham,效果很好!我认为我的主要问题是无法考虑到底要搜索什么,即“正则表达式”如果可以的话,只是关于 repl.bat 调用的语法的几个问题? .?部分只是意味着两个引号之间的内容?示例 1 中标准输出部分之前的 x 是因为我们在查找部分中使用了引号字符吗? ( 在示例 2 中是否只计算为 ( ? (它似乎没有在文档中与 \\、\b 等一起列出)
  • @ChrisMoore - ? 使.* 表达式非贪婪,这意味着它一旦成功匹配以下表达式就会停止匹配(这个概念很难解释)。 X 选项是启用 \q 语法的引用所必需的。括号之间的文本被捕获,以便可以在替换字符串中引用。 \(\) 只是转义了 () 不捕获的字符。阅读我在 REPL 文档中的链接中提供的 MicroSoft 正则表达式文档。另外,不要忘记接受满足您需求的最佳答案。