如何使用 sed 保持彩色输出

Joh*_*iak 10 osx ls colors pipe sed

我正在使用该sed命令,我想保留上一个命令的彩色输出。的输出ls是彩色的,但 sed 的输出不是。我正在使用 OSX。

ls -la | sed -En  '/Desktop/q;p'
Run Code Online (Sandbox Code Playgroud)

Fox*_*Fox 13

在 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'
Run Code Online (Sandbox Code Playgroud)

  • @8bittree 传递 `-G` 相当于定义 `$CLICOLOR`(因此还不够) (2认同)

Ulr*_*arz 6

我会盲目地猜测您的发行版与许多发行版一样,都有一个映射ls到ls --color=auto.ls -la --color=always | sed …应该管用。

(从auto广义上讲,该设置ls检查其输出是否进入显示器,并且只检查显示的颜色。原因是颜色是通过转义序列实现的,即不可见的命令字符,因此程序可能会混淆它们对于文件名的一部分,诸如此类。)

  • 盲目猜测是错误的。OSX 不是 Linux 发行版,也不使用 GNU 用户空间 (3认同)