如果我做

$ 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

然而,了解自己到底是什么非常重要 grepping 这里。不仅是 grepls 不必要的(使用 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仅仅通过直接调用二进制文件:

/bin/ls ....

由于:你真的描述的代码应工作,除非LS忽略--color始终为一些奇怪的原因或缺陷

我怀疑一些别名或函数是加(直接或通过一个变量)的一些选项。仔细检查,这是并非如此。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top