4

PowerShell スクリプトを使用して正規表現をすべて検索し、ファイルに出力しています。この質問には 2 つの目的があります。

  1. 列の値から先頭の空白を削除します
  2. 追加フィールドの幅を指定する (LineNumbers)

これは私がこれまでに持っているものです:

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

これのすべてのバリエーションですが、「Format-Table: パラメータ名 width=50 に一致するパラメータが見つかりません」のようなエラーが発生します。

4

4 に答える 4

6

ファイルへの出力に 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 文字の右寄せにスペースを追加する列

于 2011-07-19T08:02:16.830 に答える
6

TrimStart() メソッドを使用して、先頭のスペースを削除できます。末尾から文字を削除する TrimEnd() や、文字列の両側から文字を削除する Trim() もあります。

于 2011-07-19T06:50:56.073 に答える
5

今はテストできませんが、これでうまくいくか、少なくとも正しい方向に進むことができると思います。

gci -recurse -include *.* | Select-String -pattern $regexPattern |`
Format-Table Path, @{Name='Line'; Expression={$_.Line -replace '^\s+', ''}; Width=50}
于 2011-07-19T06:39:28.933 に答える