ls独自のカラーリングがオンになっているため、grep はおそらく のカラー コードを削除しています。
あなたはこれを「することができました」:
ls -l --color=always | grep --color=never pattern
grepただし、ここで何を ping しているのかを正確に理解することは非常に重要です。greppingがls不要なだけでなく (glob代わりに a を使用)、この特定のケースでは、ファイル名とファイルの統計情報だけでなく、 !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 つの優れたドキュメントを読むことを強くお勧めします。