如果我做
$ ls -l --color=always
我得到目录中的文件列表,并为不同的文件类型等提供了一些很好的着色。
现在,我想通过grep来管理ls的彩色输出,以过滤掉一些我不需要的文件。关键是我仍然希望在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
但是,您了解您在这里的感受是非常重要的。不仅不需要使用ls(使用glob代替),这种特殊情况不仅仅是通过文件名和文件统计信息,还可以通过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
>球的力量:http://mywiki.wooledge.org/glob