这是一个最小的repro示例.
预期结果:
PS C:\> ("a", "b")
a
b
PS C:\> ("a", "b") | Select-String "b"
b
PS C:\>
Run Code Online (Sandbox Code Playgroud)
实际结果:
PS C:\> ("a", "b")
a
b
PS C:\> ("a", "b") | Select-String "b"
b
PS C:\>
Run Code Online (Sandbox Code Playgroud)
如您所见,第二个输出前面有一个空行,匹配行后面有两个空行.
为什么会这样?我能做些什么呢?
(注意:这是一个最小的例子.在我的实际代码中,我正在解析svn status未提交文件的输出,我得到了与虚假换行相同的问题.)
怪异输出的原因是Powershell完全是关于对象的.在这种特殊情况下,Select-String返回MatchInfo对象.像这样,
PS C:\> $o = ("a", "b") | Select-String "b"
PS C:\> $o
b
PS C:\> $o.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False MatchInfo System.Object
Run Code Online (Sandbox Code Playgroud)
对于额外的混淆,显式调用ToString()不输出换行符:
PS C:\> $o.ToString()
b
PS C:\>
Run Code Online (Sandbox Code Playgroud)
对于解决方法,请查询MatchInfo的Line属性,如下所示,
PS C:\> ("a", "b") | Select-String "b" | % { $_.Line }
b
PS C:\>
Run Code Online (Sandbox Code Playgroud)
请参阅Keith Hill 关于类似问题的答案.
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |