题
如果我做
$ 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
ping 这里。不仅是 grep
平 ls
不必要的(使用 glob
相反),这个特殊情况是 grep
不仅可以通过文件名和文件统计信息进行 ping 操作,还可以通过添加的颜色代码进行 ping 操作 ls
!
你的问题的真正答案是:不 grep
它。永远不需要管道 ls
进入任何东西或捕获其输出。 ls
仅用于人类解释(例如到 看 在一个 交互的 仅限 shell,当然,为此目的它非常方便)。如前所述,您可以过滤哪些文件 ls
使用 glob 进行枚举:
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
s: http://mywiki.wooledge.org/glob
其他提示
,你应该检查你是否真的使用了“真正的” LS仅仅通过直接调用二进制文件:
/bin/ls ....
由于:你真的描述的代码应工作,除非LS忽略--color始终为一些奇怪的原因或缺陷
我怀疑一些别名或函数是加(直接或通过一个变量)的一些选项。仔细检查,这是并非如此。
不隶属于 StackOverflow