質問
私が行った場合
$ 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
: http://mywiki.wooledge.org/ParsingLs - のパワー
glob
s: http://mywiki.wooledge.org/glob
他のヒント
あなたが本当に「本物の」lsを使用している場合、あなただけの直接バイナリを呼び出すことによって、チェックする必要があります:
/bin/ls ....
ので:LSは--colorは、いくつかの奇妙な理由やバグのために、常に=無視しない限り、あなたが本当に記述されたコードは、動作するはずです。
。私は(直接または変数を介して)いくつかのオプションが追加され、いくつかのエイリアスや関数を疑います。これがそうでないことを再度確認します。