duc*_*lip 23 bash grep ls colors
如果我做
$ ls -l --color=always
Run Code Online (Sandbox Code Playgroud)
我得到了一个目录中的文件列表,为不同的文件类型等提供了一些很好的着色.
现在,我希望能够管理ls直通的彩色输出grep来过滤掉一些我不需要的文件.关键是我仍然想在grep过滤器后保留着色.
$ ls -l --color=always | grep -E some_regex
Run Code Online (Sandbox Code Playgroud)
^ grep后我失去了色彩
编辑:我正在使用无头服务器Ubuntu 8.10,Bash 3.2.39,几乎是一个没有花哨配置的股票安装
lhu*_*ath 49
你的grep可能正在删除ls它的颜色代码,因为它有自己的颜色打开.
你"可以"做到这一点:
ls -l --color=always | grep --color=never pattern
Run Code Online (Sandbox Code Playgroud)
但是,了解您在grep这里的确切内容非常重要.不仅grepping 是ls不必要的(使用glob替代),这个特殊情况grep不仅通过文件名和文件统计信息ping,还通过添加的颜色代码ls!
你问题的真正答案是:不是吗grep.永远不需要管道ls输入或捕获其输出. ls仅用于人类解释(例如,仅在交互式外壳中查看,并且为此目的,它当然非常方便).如前所述,您可以使用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)
Run Code Online (Sandbox Code Playgroud)
我强烈建议你阅读这两个关于此事的优秀文件:
ls:http://mywiki.wooledge.org/ParsingLsglobs 的力量:http://mywiki.wooledge.org/glob