如何使用sed保持彩色输出


10

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

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

Answers:


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'

macOS ls的确也可以-G选择启用颜色,但是我不确定它在管道中的行为。
8bittree

2
@ 8bittree传递-G等效于定义$CLICOLOR(因此不足)
Fox

6

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

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


3
盲目的猜测是错误的。OSX不是Linux发行版,并且不使用GNU用户区
Fox,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.