繁体   English   中英

为什么 PowerShell -Replace 在每行前面添加一个额外的空白?

[英]Why PowerShell -Replace is adding an extra white space in front of each line?

我对 PowerShell 中的-Replace有一个奇怪的问题。 这个命令 output 一个列表,过滤:

PS C:\> dism /image:pro /Get-ProvisionedAppxPackages | Select-String -Pattern 'Nome'

Nome visualizzato: Microsoft.BingWeather
Nome visualizzato: Microsoft.DesktopAppInstaller
Nome visualizzato: Microsoft.GetHelp
Nome visualizzato: Microsoft.Getstarted
Nome visualizzato: Microsoft.HEIFImageExtension
Nome visualizzato: Microsoft.Messaging
Nome visualizzato: Microsoft.Microsoft3DViewer
Nome visualizzato: Microsoft.MicrosoftOfficeHub
Nome visualizzato: Microsoft.MicrosoftSolitaireCollection
Nome visualizzato: Microsoft.MicrosoftStickyNotes
Nome visualizzato: Microsoft.MixedReality.Portal
Nome visualizzato: Microsoft.MSPaint

Output 很干净(一些空行,这里不显示)。

当我尝试添加| % {$_ -Replace '[^:]+:',''} | % {$_ -Replace '[^:]+:',''}用于替换所有后面的:字符,在每行的开头添加一个额外的空格到列表中

PS C:\> dism /image:pro /Get-ProvisionedAppxPackages | Select-String -Pattern 'Nome' | % {$_ -Replace '[^:]+:',''}
 Microsoft.BingWeather
 Microsoft.DesktopAppInstaller
 Microsoft.GetHelp
 Microsoft.Getstarted
 Microsoft.HEIFImageExtension
 Microsoft.Messaging
 Microsoft.Microsoft3DViewer
 Microsoft.MicrosoftOfficeHub
 Microsoft.MicrosoftSolitaireCollection
 Microsoft.MicrosoftStickyNotes
 Microsoft.MixedReality.Portal
 Microsoft.MSPaint

为什么? 我可以很容易地用一个额外的修复| % {$_ -Replace '\s+',''} | % {$_ -Replace '\s+',''} ,但我想了解为什么会这样。

我的评论作为答案:

您看到的额外空格是冒号后面的空格字符。 您的正则表达式没有过滤掉那个空间,所以它仍然是 output 中的第一个字符。

而不是| % {$_ -Replace '[^:]+:',''} | % {$_ -Replace '[^:]+:',''} ,使用| % {$_ -replace '^.+:\s*'} | % {$_ -replace '^.+:\s*'}删除从开始到包括冒号在内的所有内容以及所有可能的额外空格字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM