sedを使用してカラー出力を維持する方法


10

sedコマンドを使用していて、前のコマンドのカラー出力を保持したい。の出力lsは色付けされていますが、sedの出力は色付けされていません。OSXを使用しています。

ls -la | sed -En  '/Desktop/q;p'

回答:


13

macOSでは、lsはGNU lsではなく--color=always、Linuxユーザーがこの機能に期待するオプションを受け入れません。

のmacOSバージョンでlsは、色は2つの変数によって制御されます$CLICOLORおよび$CLICOLOR_FORCE。前者が定義されていて、で指定された端末$TERMが色をサポートしていて、出力が端末に対するものである場合、この出力はGNUの--color=autoオプションとよく似た色になります。後者の変数も定義されている場合、GNUのように動作する最終条件が削除されます--color=always

したがって、色をに渡すにsedは、次のようなものが必要になります。

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'

macOSにls-Gカラーを有効にするオプションもありますが、パイプラインでどのように動作するかはわかりません。
8ビットツリー

2
@ 8bittree Passing -Gは、定義と同等$CLICOLORです(したがって、不十分です)
Fox

6

多くの場合と同様に、あなたのディストリビューションにはにマップlsされるエイリアスがあると思いますls --color=autols -la --color=always | sed …うまくいくはずです。

auto設定は、大まかに言って、lsその出力がディスプレイに送られるかどうか、およびディスプレイの色のみをチェックします。これは、色がエスケープシーケンス、つまり不可視のコマンド文字によって実現されるため、プログラムがそれらを混乱させる可能性があるためですファイル名の一部については、そのようなものです。)


3
盲目の推測は間違っています。OSXはLinuxディストリビューションではなく、GNUユーザーランドを使用していません
Fox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.