Answers:
在macOS上,ls它不是GNU ls,并且不接受--color=alwaysLinux用户可能期望使用此功能的选项。
在macOS版本中ls,颜色由两个变量控制:$CLICOLOR和$CLICOLOR_FORCE。如果定义了前者,则由指定的终端$TERM支持颜色,并且输出到终端,则该输出将被着色,就像GNU的--color=auto选项一样。如果还定义了后一个变量,则将删除最终条件,其行为类似于GNU的--color=always。
因此,要使颜色传递到sed,您将需要以下内容:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-G等效于定义$CLICOLOR(因此不足)
我会盲目猜测您的发行版与许多发行版一样,都有一个别名映射ls到ls --color=auto。ls -la --color=always | sed …应该管用。
(从auto广义上讲,该设置ls检查输出是否显示在显示器上,并且仅检查显示器的颜色。其原因是,颜色是由转义序列(即不可见的命令字符)实现的,因此程序可能会使它们混淆对于文件名的一部分,诸如此类。)
ls的确也可以-G选择启用颜色,但是我不确定它在管道中的行为。