如果我这样做
$ ls -l --color=always
我在目录中获得了一个文件列表,其中有一些很好的着色,适用于不同的文件类型等。
现在,我希望能够通过ls
管道grep
的彩色输出来过滤掉一些我不需要的文件。关键是我仍然想在grep过滤器后保留着色。
$ ls -l --color=always | grep -E some_regex
^我在grep
之后失去了色彩 编辑:我正在使用无头服务器Ubuntu 8.10,Bash 3.2.39,几乎是一个没有花哨配置的股票安装答案 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)
我高度建议您阅读这两篇关于此事的优秀文件:
ls
的错误: http://mywiki.wooledge.org/ParsingLs glob
的力量: http://mywiki.wooledge.org/glob 答案 1 :(得分:0)
你应该直接调用二进制文件来检查你是否真的使用了“真正的”ls:
/bin/ls ....
因为:您描述的代码确实应该有效,除非ls忽略--color =总是出于某种奇怪的原因或错误。
我怀疑某些别名或函数添加(直接或通过变量)某些选项。仔细检查一下情况并非如此。