如何从PowerShell输出中修剪空格?

时间:2011-07-19 04:49:04

标签: powershell whitespace removing-whitespace

我正在使用PowerShell脚本查找所有出现的正则表达式并将其输出到文件。我对这个问题有两个目标。

  1. 从列的值中删除前导空格
  2. 指定额外字段的宽度(LineNumbers)
  3. 这是我到目前为止所做的:

    gci -recurse -include *.* | Select-String -pattern $regexPattern |`
    Format-Table -GroupBy Name -Property Path, Line -AutoSize
    

    这输出以下内容:

    Path                      Line                                                   
    ----                      ----
    C:\myRandomFile.txt       This is line 1 and it is random text.
    C:\myRandomFile.txt                This is line 2 and it has leading white space.
    C:\myNextRandomFile.txt            This is line 3 and it has leading white space.
    C:\myLastRandomFile.txt                         This is line 4. 
    

    这是因为文件具有前导空格(实际上是缩进/制表空间,但输出为空格)。我无法更改原始文件并删除前导空格,因为它们是我们的生产文件/ SQL脚本。

    我想修剪Line列的前导空格,以便输出如下所示:

    Path                      Line                                                   
    ----                      ----
    C:\myRandomFile.txt       This is line 1 and it is random text.
    C:\myRandomFile.txt       This is line 2 and it has no leading white space.
    C:\myNextRandomFile.txt   This is line 3 and it has no leading white space.
    C:\myLastRandomFile.txt   This is line 4 and this is how it should look. 
    

    并且,如果我使用

    添加LineNumbers列
    -property LineNumbers 
    

    然后LineNumbers列占据行的大约一半空间。我可以指定LineNumbers的宽度吗?我已经尝试过-AutoSize标志,但这似乎不太好用。我试过了

    LineNumber;width=50
    LineNumber width=50
    LineNumber -width 50
    

    以及此的所有变体,但我得到的错误是“格式表:找不到匹配参数名称宽度= 50的参数”

4 个答案:

答案 0 :(得分:6)

您可以使用TrimStart()方法删除前导空格。还有TrimEnd()从末尾删除字符,或者Trim()从字符串两边删除字符。

答案 1 :(得分:5)

我现在无法测试它,但我认为这应该可以解决问题,或者至少让你朝着正确的方向前进:

gci -recurse -include *.* | Select-String -pattern $regexPattern |`
Format-Table Path, @{Name='Line'; Expression={$_.Line -replace '^\s+', ''}; Width=50}

答案 2 :(得分:5)

我不会使用Format-Table输出到文件。

我宁愿使用Export-Csv

gci -recurse -include *.* | Select-String -pattern $regexPattern |`
select-object linenumber, path, line | Export-Csv c:\mycsv.csv -Delimiter "`t"

如果您仍想使用Format-Table,我建议您阅读本文 http://www.computerperformance.co.uk/powershell/powershell_-f_format.htm

引用:

  

“{0,28} {1,20} {2,-8}” - f`创建:

     

第一项28个字符的列,右对齐并添加一个   space一个列为第二个项目的20个字符右对齐和   为左对齐的8个字符的第3项添加空格A列。

答案 3 :(得分:0)

如果这十年的人来看这里,有一个使用 Trim() 的替代方法:

gci -recurse -include *.* | Select-String -pattern $regexPattern |`
Format-Table Path, @{Name='Line'; Expression={$_.Line.Trim()}; Width=50}