質問

私が行った場合

$ ls -l --color=always

ディレクトリ内のファイルのリストを、さまざまなファイルタイプなどに応じた素敵な色付きで取得します。

さて、色付きの出力をパイプできるようにしたいと思います。 ls を通して grep 必要のないファイルをフィルタリングして除外します。重要なのは、grep フィルター後の色付けを保持したいということです。

$ ls -l --color=always | grep -E some_regex

^ grep後に色が失われる

編集:私はヘッドレスサーバーの Ubuntu 8.10、Bash 3.2.39 を使用していますが、特別な設定を必要としないほぼ標準インストールです。

役に立ちましたか?

解決

grep はおそらく削除しています lsのカラーコードは、独自のカラーリングがオンになっているためです。

これは「できます」:

ls -l --color=always | grep --color=never pattern

ただし、自分が何者であるかを正確に理解することが非常に重要です grepここにピングしてください。それだけではありません grepピング ls 不要( glob 代わりに)、この特定のケースは次のとおりです。 grepファイル名やファイル統計だけでなく、追加されたカラーコードを通じても ping を実行します。 ls!

あなたの質問に対する本当の答えは次のとおりです。やめてください grep それ。パイプを接続する必要はありません ls 何かに取り込んだり、その出力をキャプチャしたりできます。 ls 人間による解釈のみを目的としています (例:に 見て相互の作用 もちろんシェルのみですが、この目的のためには非常に便利です)。前述したように、どのファイルをフィルタリングできるか ls グロブを使用して列挙します。

ls -l *.txt      # Show all files with filenames ending with `.txt'.
ls -l !(foo).txt # Show all files with filenames that end on `.txt' but aren't `foo.txt'. (This requires `shopt -s extglob` to be on, you can put it in ~/.bashrc)

非常に この問題に関する次の 2 つの優れた文書を読むことをお勧めします。

他のヒント

あなたが本当に「本物の」lsを使用している場合、あなただけの直接バイナリを呼び出すことによって、チェックする必要があります:

/bin/ls ....

ので:LSは--colorは、いくつかの奇妙な理由やバグのために、常に=無視しない限り、あなたが本当に記述されたコードは、動作するはずです。

私は(直接または変数を介して)いくつかのオプションが追加され、いくつかのエイリアスや関数を疑います。これがそうでないことを再度確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top