Как обрезать пустые места из вывода PowerShell? - PullRequest
4 голосов
/ 19 июля 2011

Я использую скрипт PowerShell, чтобы найти все вхождения выражения регулярного выражения и вывести его в файл. У меня есть две цели для этого вопроса.

  1. Удалить начальные пробелы из значения столбца
  2. Укажите ширину для дополнительного поля (номера строк)

Это то, что я имею до сих пор:

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.

Я хочу обрезать начальное пустое пространство для столбца «Линия», чтобы выходные данные выглядели так:

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 занимает примерно половину пространства в строке. Могу ли я указать ширину номеров строк? Я пробовал флаг -AutoSize, но это, похоже, не работает хорошо. Я пробовал

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

и все его варианты, но я получаю сообщения об ошибках типа "Формат-таблица: не удается найти параметр, который соответствует ширине имени параметра = 50"

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

Вы можете использовать метод TrimStart () для удаления начальных пробелов.Также есть TrimEnd () для удаления символов с конца или Trim () для удаления символов с обеих сторон строки.

5 голосов
/ 19 июля 2011

Я бы не использовал 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 `создает:

Столбец для 1-го элемента из 28 символов выровнен по правому краю и добавляет пробел Столбец для 2-го элемента из 20 символов выровнен по правому краю и добавляет пробел столбец для 3-го элемента из 8 символов по левому краю.

5 голосов
/ 19 июля 2011

Я не могу проверить это прямо сейчас, но я думаю, что это должно сработать или, по крайней мере, заставить вас двигаться в правильном направлении:

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