我正在使用该sed
命令,并且想保留上一个命令的彩色输出。的输出ls
是彩色的,但 sed 的输出不是。我正在使用 OSX。
ls -la | sed -En '/Desktop/q;p'
答案1
在 macOS 上,它ls
不是 GNU ls
,并且不接受--color=always
Linux 用户可能期望的此功能选项。
在 macOS 版本中ls
,颜色由两个变量:$CLICOLOR
和$CLICOLOR_FORCE
。如果定义了前者,指定的终端$TERM
支持颜色,并且输出到终端,那么这个输出将是彩色的,很像GNU的--color=auto
选项。如果也定义了后一个变量,则最终条件将被删除,其行为类似于 GNU 的--color=always
.
因此,要将颜色传递给sed
,您需要类似以下内容:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
答案2
我会盲目地猜测您的发行版与许多发行版一样,有一个映射ls
到ls --color=auto
.ls -la --color=always | sed …
应该管用。
(auto
从广义上讲,该设置ls
检查其输出是否进入显示器,并且仅检查显示器的颜色。这样做的原因是颜色是通过转义序列实现的,即不可见的命令字符,因此程序可能会混淆它们对于文件名的一部分,类似的东西。)