How to trim blank spaces from PowerShell output?
Solution 1
I can't test it right now, but I think this should do the trick or at least get you going in the right direction:
gci -recurse -include *.* | Select-String -pattern $regexPattern |`
Format-Table Path, @{Name='Line'; Expression={$_.Line -replace '^\s+', ''}; Width=50}
Solution 2
I would not use Format-Table for output to a file.
I'd rather use Export-Csv
gci -recurse -include *.* | Select-String -pattern $regexPattern |`
select-object linenumber, path, line | Export-Csv c:\mycsv.csv -Delimiter "`t"
If you still want to use Format-Table I reccomend reading this aricle http://www.computerperformance.co.uk/powershell/powershell_-f_format.htm
Quote:
"{0,28} {1, 20} {2,-8}" -f ` creates:
A column for the 1st item of 28 characters, right-aligned and adds a space A column for the 2nd item of 20 characters right-aligned and adds a space A column for the 3rd item of 8 characters left-aligned.
Solution 3
You can use the TrimStart() method to remove leading spaces. There's also TrimEnd() to remove characters from the end, or Trim() to remove characters from both sides of the string.
![Alicia](https://i.stack.imgur.com/ycLNC.jpg?s=256&g=1)
Alicia
Updated on January 21, 2021Comments
-
Alicia over 3 years
I am using a PowerShell script to find all occurrences of a regex expression and output it to file. I have two objectives for this question.
- Remove leading white space from a column's value
- Specify a width for an extra field (LineNumbers)
This is what I have so far:
gci -recurse -include *.* | Select-String -pattern $regexPattern |` Format-Table -GroupBy Name -Property Path, Line -AutoSize
This outputs the following:
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.
This is because the files have leading white spaces (actually indents/tab spaces, but outputted as white spaces). I can't change the original files and remove the leading white space as they are our production files/SQL scripts.
I want to trim the leading white space for the Line column so that the output looks like this:
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.
And, if I add the LineNumbers column by using
-property LineNumbers
then the LineNumbers column take up about half the space in the row. Can I specify the width of the LineNumbers? I've tried the -AutoSize flag, but this doesn't seem to work well. I've tried
LineNumber;width=50 LineNumber width=50 LineNumber -width 50
and all variations of this, but I get errors to the likes of "Format-Table: A parameter cannot be found that matches parameter name width=50"
-
Alicia almost 13 yearsThis is what I used in the end:
gci -recurse -include *.* | Select-String -pattern $regexPattern | Format-Table @{Name='Path'; Expression={$_.Path}; Width=80}, @{Name='Line'; Expression={$_.Line -replace '^\s+', ''}; Width=200} | Out-File $outputTxtFile
-
Alicia almost 13 yearsThe Export-Csv worked up to the point where the .csv file grew to ~100MB and PowerShell error'd out with a "OutOfMemoryException" exception. +1 for the link.