使用 powershell 在子字符串中不需要 space
Unwanted space in substring using powershell
我是 PS 的新手:我正在从多个 xml 文件 ($ABB) 中提取字段。 $net var 基于模式搜索和 returns 第 2 行的非静态子字符串。这是我目前所拥有的:
$ABB = If ($aa -eq $null ) {"nothing to see here"} else {
$count = 0
$files = @($aa)
foreach ($f in $files)
{
$count += 1
$mo=(Get-Content -Path $f )[8].Substring(51,2)
(Get-Content -Path $f | Select-string -Pattern $lf -Context 0,1) | ForEach-Object {
$net = $_.Context.PostContext
$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>"
$enet = $enet.trim()}
Write-Host "$mo-nti-$lf-$enet" "`r`n"
}}
输出如下所示:03-nti-260-8409。
请注意 8409 前面的 space 对应于 $net 变量。我自己无法解决这个问题,我的方法可能都是错误的。我愿意接受任何和所有的建议。谢谢你的帮助。
只需使用 -replace 即可删除任何空格
例如:
'03-nti-260- 8409' -replace '\s'
<#
# Results
03-nti-260-8409
#>
由于$net = $_.Context.PostContext
之后$net
的第一行中的第一个字符包含拆分字符,因此将输出一个空行作为输出的第一个元素。然后,当您对输出进行字符串化时,每个拆分输出项都由一个 space.
连接
您需要 select 行不为空:
$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>" -ne ''
解释:
-Split
未被 ()
包围的字符从输出中删除,剩余的字符串从每个匹配的字符中拆分为多个元素。当匹配的字符开始或结束字符串时,将输出一个空行。如果不需要,必须小心删除这些线。 Trim()
将不起作用,因为 Trim()
适用于单个字符串而不是数组,并且不会删除空字符串。
在命令末尾添加 -ne ''
,删除空行。这只是一个内联布尔条件,当应用于数组时,仅输出条件为真的元素。
您可以在下面查看空行情况的示例:
123 -split 1
23
123 -split 1 -ne ''
23
我是 PS 的新手:我正在从多个 xml 文件 ($ABB) 中提取字段。 $net var 基于模式搜索和 returns 第 2 行的非静态子字符串。这是我目前所拥有的:
$ABB = If ($aa -eq $null ) {"nothing to see here"} else {
$count = 0
$files = @($aa)
foreach ($f in $files)
{
$count += 1
$mo=(Get-Content -Path $f )[8].Substring(51,2)
(Get-Content -Path $f | Select-string -Pattern $lf -Context 0,1) | ForEach-Object {
$net = $_.Context.PostContext
$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>"
$enet = $enet.trim()}
Write-Host "$mo-nti-$lf-$enet" "`r`n"
}}
输出如下所示:03-nti-260-8409。 请注意 8409 前面的 space 对应于 $net 变量。我自己无法解决这个问题,我的方法可能都是错误的。我愿意接受任何和所有的建议。谢谢你的帮助。
只需使用 -replace 即可删除任何空格 例如:
'03-nti-260- 8409' -replace '\s'
<#
# Results
03-nti-260-8409
#>
由于$net = $_.Context.PostContext
之后$net
的第一行中的第一个字符包含拆分字符,因此将输出一个空行作为输出的第一个元素。然后,当您对输出进行字符串化时,每个拆分输出项都由一个 space.
您需要 select 行不为空:
$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>" -ne ''
解释:
-Split
未被 ()
包围的字符从输出中删除,剩余的字符串从每个匹配的字符中拆分为多个元素。当匹配的字符开始或结束字符串时,将输出一个空行。如果不需要,必须小心删除这些线。 Trim()
将不起作用,因为 Trim()
适用于单个字符串而不是数组,并且不会删除空字符串。
在命令末尾添加 -ne ''
,删除空行。这只是一个内联布尔条件,当应用于数组时,仅输出条件为真的元素。
您可以在下面查看空行情况的示例:
123 -split 1
23
123 -split 1 -ne ''
23