Powershellの「more」または「less」コマンドに相当しますか?


92

linux \ unixシェルで利用可能な 'more'コマンドに出力をパイプすることにより、出力にページ番号を付ける方法はありますか?


あまり知らない人のために、それについていくつかのクールなことは、前に戻る、矢印を使用する、ページを上下に移動する、さらにはキー「/」を使用して検索し、結果を強調表示できることです。
Constantino Cronemberger

回答:


65

まあ... "もっと"があります。それは多かれ少なかれ(...)他のプラットフォームに期待するものと同じです。次の例を試してください。

dir -rec | more

1
moreは、gcmを使用して関数の定義を確認すると、それを正確に実行しますmore | select Definition | fl
Joey

2
実際、moreへのパイプは、more.com実装とは別の「out-host -paging」へのパイプと同じです。実際には、識別できる違いはありません。
Jouni Heikniemi 2009

1
面白い!私にとって、gcm moreは2つの定義を返します。1つはPowerShell関数で、空の引数が指定された場合、「$ input | out-host -p」を実行します。これは、gci -rec |で見られる動作です。もっと。一方、gci -rec | more.com、more.comの通常の動作を取得します。PS2がインストールされているW7 RCでは、「more」と入力しただけでもmore.comが表示されるようです。PS1を搭載したVistaでは、上記の動作が発生します。huddledmasses.org/…に基づいて、関数がW7でも実行されると思いませんか?うーん...
Jouni Heikniemi 2009

1
すみません、それは特によく書かれていませんでした。したがって、私のポイントは、PowerShell 1を使用したVistaでは、「more」へのパイプ処理でOut-Host -pが呼び出され、PowerShell 2を使用したW7では、more.comが呼び出されるということです。
Jouni Heikniemi 2009

1
ええ、私は修正して立っています。ごめんなさい。はい、確かに、PS 1に、それは(自己への注意:必ず、それは非常に似ていても、全体の機能を読んで)アウトホスト-p、ないmore.comを呼び出す
ジョーイ

102

はいあります:

some-cmdlet | out-host -paging


以前はだんだん使っていましたが、どちらも可能な限りユーザーフレンドリーではありません。このバリエーションは他のバリエーションよりも便利で使いやすいことがわかりました。どうもありがとう。
TheXenocide 2010年

非常に大きなファイルのコンテンツを印刷する場合、Get-Contentコマンドレットがコンテンツをout-hostコマンドレットにパイプするように即座に開始されたので、これは私にとって非常にうまくいきました。
ヘルマン・

13
Out-Hostの-PagingパラメーターはPowerShell ISEではサポートされていないことに注意してください。
Martin Hollingsworth、2011

@BrunoBrantそれはポイントではありません。パイプで出力を何にでもできます。lessstdin、テキストを受け入れる大きなテキストビューアアプリケーションです。あなたは、一時ファイルへのパイプそれは可能性があり、それを開くnanoか、vimEVEN MOAR POWERRRRのために!ポイントではありません。PowerShellは似ていますbash(ただし、より良いのはimho)。lessにありませんbash。それは別のバイナリです。だからあなたの批判は無効です。
アランマクビー-MSFT 2017

7
また、その答えにコメント:エイリアスohのためであるOut-Host、と競合はありません場合は、コマンドがかもしれないので、パラメータは、省略することができますSome-Cmdlet | oh -p
アラン・マクビー- MSFT

33

dir -rec | more 悪いアドバイスです。

それは画面に出力する前にコマンド全体を評価するようにし、出力のページ付けのようなものには必要ありません。

いくつかの極端な例では、(例えば、システムがクラッシュする可能性がありdir 'C:\' | more

一方、を使用out-host -pagingすると、利用可能な情報が画面に出力されます。


2
リモートPowerShellを使用していて、ページャーを介してリモートWindowsサーバー上のコマンドをパイプ処理する場合、パイプ処理はout-host -paging 必要に応じて 機能します。moreリモートコマンドの実行中にパイプスルーすることは役に立ちません。テキスト全体が一度に表示されます。
IllvilJa 2013

5
のエイリアスはout-host -pagingですoh -pa
Josh

26

PowerShellのコミュニティの拡張機能は、実際にページングを処理するためにless.exeの移植コピーを使用して、より完全なUnixスタイルの機能セットを提供します「少ない」という名前の便利な機能を持っています。

管理シェルを起動して実行することでインストールできます:

Find-Package pscx | Install-Package -Force

(これforceは古いバージョンをアップグレードすることです)

パイプで文字列を渡すか、ファイル名をダイレクトパラメータとして指定できます。

type foo.txt | less
less foo.txt, bar.txt, baz.txt

ConEmuおよびPowershellウィンドウで機能しますが、残念ながらv2.0 ISEで期待したとおりに機能しません。


5
インストールにより、いくつかの基本的なPowershellコマンド(gcb、Expand-Archive、Format-Hex、Get-Hash、help、prompt、Get-Clipboard、Get-Help、Set-Clipboard)が上書きさforceれるため、「古いバージョンをアップグレードすること」と表示されます少し誤解を招く。
TNT

単にエラーや警告を使用せずに、現在のユーザーに対してインストール:Find-Package pscx | Install-Package -Force -scope currentuser -allowclobber
アンドレアス・ディートリッヒ

素晴らしいヒントをありがとう!
Rui Craveiro

7

「more」コマンドより「less」コマンドの方が好きです。lessコマンドを使用すると、結果を順方向ではなく逆方向にページングすることもできます。

Git for Windowsの「less」が機能します(私のパスはC:\Program Files (x86)\Git\usr\less.exeです。PowershellでGowバージョンの「less」でエラーが発生しました。

例:

ls|less

入力を節約するために、Powershellプロファイルにエイリアス「l」を追加しました。

sal l "C:\Program Files (x86)\Git\bin\less.exe"


2
私も。逆方向のページングに加えて、lessを使用すると、結果に対してテキスト検索を実行できます(スラッシュ、次にテキストを入力し、Enterキーを押してから、次の結果には「n」、前の結果には「p」)。とても、とても、便利です。
Rui Craveiro

lessここにもう一人のファン。しかし、私はこのエラーを受け取ります。何かアドバイス?________________________________________PS C:\Users\oli> Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' Out-Host : A positional parameter cannot be found that accepts argument 'C:\Program Files\Git\usr\bin\less.exe'. At line:1 char:20 + Get-Content tmpf | out-host 'C:\Program Files\Git\usr\bin\less.exe' + CategoryInfo : InvalidArgument: (:) [Out-Host], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutHostCommand
オリステッドマン19/07/24

@olisteadman、これはless.exeの公式Gitバージョンです。Git for Windows gitforwindows.orgバージョンのless を試しましたか?
ジョシュ

「アウトホスト」を使用する必要はありません。私はこれを使用します: "Get-Content tmpf | C:\ cygwin64 \ bin \ less.exe"
Constantino Cronemberger

1
$ env:PAGER = "C:\ cygwin64 \ bin \ less.exe"を設定することも非常に良い方法です。たとえば、「help」と入力したときに使用されます
Constantino Cronemberger

4
PS> cd C:\

PS> dir -r -ex 0 | out-Host -paging

PS> dir -file -r -ea 0 c:\Windows | Select FullName,Length,LastWriteTime | out-gridview

3

more出力を制限するために使用されるのではなく、出力にページ番号を付けて、ターミナルで読みやすくするために使用されます。

headandの使用について話していtailますか? EggHeadCafeには次の例があります。

type my.txt | select-object -first 10

type my.txt | select-object -last 10

エミュレートするheadtail


大きなファイルの場合、パイピングは非常に遅くなります。行うには良い方法(ビルトインオプション)がありますheadし、tail今PowerShellのは:stackoverflow.com/a/41626586/1081043
wisbucky

2

関数定義とエイリアスをデフォルトのプロファイルに追加しました %SystemRoot%\system32\windowspowershell\v1.0\profile.ps1

この関数は主に、ページング中に押すための例外処理が追加された、Aman Dhallyによるこのブログエントリに基づいていQます。

function more2
{
   param(
     [Parameter(ValueFromPipeline=$true)]
     [System.Management.Automation.PSObject]$InputObject
   )

   begin
   {
      $type = [System.Management.Automation.CommandTypes]::Cmdlet
      $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(‘Out-Host’, $type)
      $scriptCmd = {& $wrappedCmd @PSBoundParameters -Paging }
      $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
      $steppablePipeline.Begin($PSCmdlet)
   }

   process
   {
      try
      {
         $steppablePipeline.Process($_)
      }
      catch
      {
        break;
      }
   }

   end
   {
      $steppablePipeline.End()
   }

   #.ForwardHelpTargetName Out-Host
   #.ForwardHelpCategory Cmdlet
}

New-Alias more more2

私は同じようにそれを呼び出すことができますのでdir -r | more、それはすぐにためのPowerShellのパイプラインのページごとの出力を開始する(more.comとの完全な出力を待ってではなく)。


1

VIMをインストールしている場合、私は完全に楽しんでいますdir -r | vim -R -。残念ながら、これには同じ問題がありますmore(つまり、ストリーミングなし)。


1
cat C:\Temp\test.txt

catはGet-Contentのエイリアスです。ファイルが大きいほど、ターミナルの下部に-その他-出力が表示されます。

-waitを追加することもできます

cat C:\Temp\test.txt -wait 

-waitはtailを使用するようなものですが、実際には出力を更新するだけでコマンドを再実行しています

cat C:\Temp\test.txt | oh Paging

oh =アウトホスト


1

私はまさにこの質問をしていて(まあ私はもっと少なくしたかったのですが)@ richard-bergの答えが私にとってうまくいき、PowerShell(Linuxではない)の初心者だったので、私はその答えから欠けているものを見つけました(私にとって)だった:私は最初に行く必要があった:

Find-Package pscx | Install-Package

それから「nugetパッケージのインストール」を促された。私はこれを行いましたが、で
-AllowClobberパラメータを使用する必要がありましたInstall-Package

次に、使用量を減らすために、私はしなければなりませんでした:

Set-ExecutionPolicy RemoteSigned

これはすべてうまくいきました:-)


サイトへようこそ。「答え#24」の意味がわからない。これらの数値は、列挙ではなく投票(変更される可能性があります)です。
mhhollomon

ああ、なるほど……初めてスタックオーバーフローに投稿した!私にとっては、@ richard-bergの答えを意味していました。それは受け入れられた答え
ビルネイラー

なぜ反対票を投じるのかわかりませんか?(私にとって)何かがうまくいったときに確認することは役に立ちます!
Bill Naylor

0

提案:ファイルを一時/使い捨ての.txtファイルに入れ、OSに.txt拡張子にリンクされているお気に入りのエディターを呼び出させます。

Get-Process | Out-File temp.txt; 。\ temp.txt

注:これを使用するたびに、既存のtemp.txtファイルは上書きされます。賢明にファイル名を選択してください。

上記は基本的な考え方にすぎません。
次のステップは、エイリアスまたはプロファイル関数などを使用して、これを「| more」に変換することです。

HTH、Marcelo Finkielsztein

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.