如何使用 sed 保持彩色输出

如何使用 sed 保持彩色输出

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

ls -la | sed -En  '/Desktop/q;p'

答案1

在 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'

答案2

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

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

相关内容