powershell - 用增量值替换字符

标签 powershell

我想弄清楚如何用递增的值替换 txt 文件中多次重复的特定字符串。

我尝试实现的是以下内容:

我在一个表格中有多个 HTML 链接,每个链接都有完全相同的结尾,即:XYZ

我想使用 PowerShell 将 XYZ 更改为 1、2、3、4、5 等等。

(Get-Content c:\temp\test.txt).replace('XYZ', 'MyValue') |
    Set-Content c:\temp\test.txt

这是为每次替换使用递增数字的“MyValue”部分,我不确定如何实现它。

最佳答案

提示:注意使用Get-Content | .... | Set-Content 由于 possible data loss 到同一个文件!它不适用于像您所做的那样在子表达式/分组表达式中读取文件,但将来要注意它(作为最佳实践)。归功于 @Ansgar Wiechers澄清。


解决方案:

您可以将回调函数定义为[Regex]::Replace (String, String, MatchEvaluator)方法:

$global:counter = 0
$content = (Get-Content c:\temp\test.txt)

# Below can be used to verify it's working correctly instead of creating a file
# $content = "aXYZ","bXYZ","cXYZ","dXYZ","eXYZ"

$content | % {[Regex]::Replace($_, 'XYZ', {return $global:counter += 1}) } | Set-Content c:\temp\test.txt

输出将是:

a1
b2
c3
d4
e5

解释:

传递给 Replace 的参数如下:

  1. 要搜索匹配项的字符串。
  2. 要匹配的正则表达式模式。
  3. 检查每个匹配项并返回原始匹配字符串或替换字符串的自定义方法。

每次匹配正则表达式时,自定义方法都会递增计数器。不幸的是,出于某种原因,它要求您使用全局变量范围,如果不需要,这通常不是最佳实践(如评论中的 @Paxz 所述)。

作为@TessellatingHeckler发现,解决方案的第一个版本在 $content 变量上使用了 Replace,这导致删除了所有换行符。您必须使用 Foreach-Object(或 % 作为其别名)在每一行中进行替换。

关于powershell - 用增量值替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708427/

相关文章:

powershell - 修复 PowerShell 错误 "execution of scripts is disabled on this system"的替代方法

object - 在 PowerShell 中使用多个参数实现自己的方法

powershell - 将 .vhd 镜像从 Azure 下载到本地计算机,然后上传到另一个 Azure 帐户

powershell - 在PowerShell中带括号的环境变量名称,例如%ProgramFiles(x86)%?

Powershell在数组列表中查找值

json - 当键在 Powershell 中包含点(句点)时从 JSON 解析值

powershell - 列出 powershell 中没有服务及其 PID 的进程

regex - 使用正则表达式读取多行?

python - 如何从 github pip 安装....powershell 给出错误找不到命令 'git'?

regex - PowerShell:拆分字符串而不删除拆分模式?