您的 grep 可能正在删除ls
的颜色代码,因为它打开了自己的颜色。
你“可以”这样做:
ls -l --color=always | grep --color=never pattern
但是,了解您在grep
此处 ping 的具体内容非常重要。不仅grep
ping是ls
不必要的(使用 aglob
代替),这种特殊情况grep
不仅通过文件名和文件统计信息 ping,还通过ls
!添加的颜色代码进行 ping。
你的问题的真正答案是:不要grep
。永远不需要管道ls
到任何东西或捕获它的输出。 ls
仅用于人类解释(例如,仅在交互式外壳中查看,为此目的,它当然非常方便)。如前所述,您可以使用 glob 过滤枚举的文件: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)
我强烈建议你阅读这两个关于此事的优秀文件: