【问题标题】:Replacing $_ substring value in powershell在 powershell 中替换 $_ 子字符串值
【发布时间】:2015-12-08 19:50:09
【问题描述】:

我正在尝试进一步使用我在尝试replace text at a specified line 时发现的一段精彩代码。

但是试图让它读取$_.Substring() 然后使用$_ -replace 给我带来了麻烦;虽然我没有收到错误消息,但文本没有被替换。

下面是不起作用的代码:

$content = Get-Content Z:\project\folder\subfolder\newindex2.html
$content | 
ForEach-Object { 
if ($_.ReadCount -ge 169 -and $_.ReadCount -le 171) { 
  $a = $_.Substring(40,57)
  $linked = '<a href="http://tempsite.info/folder1/folder2/' + $a + '">' + $a + '</a>'
  $_ -replace $a,$linked
} else { 
  $_ 
} 
} | 
Set-Content Z:\project\folder\subfolder\newindex2.html

重点是让 html 表格列中的单元格内容链接到网络服务器上与单元格中的内容同名的文件。

我在尝试匹配文件名的正则表达式时没有任何运气,但由于我设法做到了,所以要替换的文本总是以相同的位置结束,我想我会尝试定位代替。 要替换的文本总是 57 个字符长并且总是从位置 40 开始。

我查看了变量设置,一切都设置正确,除了

$_ -replace $a,$linked 

不替换任何东西。 相反,整个文件只是被重新写入,没有任何改变。谁能指出我所缺少的和/或指出如何更容易地达到结果?也许我使用了错误的子字符串,应该使用其他东西?

【问题讨论】:

  • $a 长什么样子?它在字符串中是否有特殊的正则表达式字符。这将阻止您正在寻找的匹配。我想先从示例文件中查看这 3 行的样子。
  • 另外,如果您已经知道要替换的内容,您甚至根本不需要正则表达式。我需要先看到 $a 我想我才能回答

标签: powershell replace substring


【解决方案1】:

-replace 右侧参数中的第一项是正则表达式模式,因此根据子字符串包含的内容,某些字符可能是正则表达式控制字符。

你可以逃避它:

$_ -replace $([regex]::Escape($a)),$linked

或者使用不使用正则表达式的String.Replace()方法:

$_.Replace($a,$linked)

最后,正如@Matt 指出的那样,您可能希望完全避免使用查找和替换方法,因为您已经知道需要在哪些字符索引处插入新值:

$_.Remove(40,57).Insert(40,$linked)

【讨论】:

  • 这是不对的。有一个 readcount 属性。使用通用汽车,你会看到。读完之后,似乎很清楚他在做什么。他的替换是什么问题
  • @Matt 提出观点后的最后一次编辑解决了问题。非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 2021-10-05
  • 2017-07-02
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
相关资源
最近更新 更多