grep'ing后保留ls着色

时间:2009-05-15 10:17:21

标签: bash grep colors ls

如果我这样做

$ ls -l --color=always

我在目录中获得了一个文件列表,其中有一些很好的着色,适用于不同的文件类型等。

现在,我希望能够通过ls管道grep的彩色输出来过滤掉一些我不需要的文件。关键是我仍然想在grep过滤器后保留着色。

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

^我在grep

之后失去了色彩 编辑:我正在使用无头服务器Ubuntu 8.10,Bash 3.2.39,几乎是一个没有花哨配置的股票安装

2 个答案:

答案 0 :(得分:49)

你的grep可能正在删除ls的颜色代码,因为它已打开了自己的颜色。

你“可以”这样做:

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

但是,了解这里grep ping的具体内容非常重要。不仅grep ping ls不必更改(使用glob代替),此特定情况grep不仅可以ping通文件名和文件统计信息,还可以通过颜色代码由ls添加!

你问题的真正答案是:不要grep它。永远不需要将ls传递给任何东西或捕获其输出。 ls仅用于人工解释(例如,仅在交互式 shell中外观,并且为此目的,它非常方便)。如前所述,您可以使用globs过滤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)

高度建议您阅读这两篇关于此事的优秀文件:

答案 1 :(得分:0)

你应该直接调用二进制文件来检查你是否真的使用了“真正的”ls:

/bin/ls ....

因为:您描述的代码确实应该有效,除非ls忽略--color =总是出于某种奇怪的原因或错误。

我怀疑某些别名或函数添加(直接或通过变量)某些选项。仔细检查一下情况并非如此。