您的 grep 可能正在删除ls的颜色代码,因为它打开了自己的颜色。
你“可以”这样做:
ls -l --color=always | grep --color=never pattern
但是,了解您在grep此处 ping 的具体内容非常重要。不仅grepping是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)
我强烈建议你阅读这两个关于此事的优秀文件: