在 powershell 中替换 $_ 子字符串值
Replacing $_ substring value in powershell
我正在尝试进一步使用我在 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 table 列 link 中单元格的内容保存到网络服务器上与单元格中内容同名的文件中。
我尝试用正则表达式匹配文件名时运气不佳,但由于我设法做到了,所以要替换的文本总是在相同的位置结束,我想我会尝试位置替换。
要替换的文本始终为 57 个字符长,并且始终从位置 40 开始。
我查看了设置的变量,一切都设置正确,除了
$_ -replace $a,$linked
不替换任何东西。
相反,整个文件只是重新写入,没有任何改变。任何人都可以指出我所缺少的 and/or 指出如何更轻松地达到结果吗?也许我使用的 Substring 有误,应该使用其他东西?
-replace
右侧参数中的第一项是正则表达式模式,因此根据子字符串包含的内容,某些字符可能是正则表达式控制字符。
你可以逃避它:
$_ -replace $([regex]::Escape($a)),$linked
或者使用不使用正则表达式的String.Replace()
方法:
$_.Replace($a,$linked)
最后,正如@Matt 指出的那样,您可能希望完全避免查找和替换方法,因为您已经知道需要在哪些字符索引处插入新值:
$_.Remove(40,57).Insert(40,$linked)
我正在尝试进一步使用我在 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 table 列 link 中单元格的内容保存到网络服务器上与单元格中内容同名的文件中。
我尝试用正则表达式匹配文件名时运气不佳,但由于我设法做到了,所以要替换的文本总是在相同的位置结束,我想我会尝试位置替换。 要替换的文本始终为 57 个字符长,并且始终从位置 40 开始。
我查看了设置的变量,一切都设置正确,除了
$_ -replace $a,$linked
不替换任何东西。 相反,整个文件只是重新写入,没有任何改变。任何人都可以指出我所缺少的 and/or 指出如何更轻松地达到结果吗?也许我使用的 Substring 有误,应该使用其他东西?
-replace
右侧参数中的第一项是正则表达式模式,因此根据子字符串包含的内容,某些字符可能是正则表达式控制字符。
你可以逃避它:
$_ -replace $([regex]::Escape($a)),$linked
或者使用不使用正则表达式的String.Replace()
方法:
$_.Replace($a,$linked)
最后,正如@Matt 指出的那样,您可能希望完全避免查找和替换方法,因为您已经知道需要在哪些字符索引处插入新值:
$_.Remove(40,57).Insert(40,$linked)