首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >grep是如何制作颜色的?

grep是如何制作颜色的?
EN

Stack Overflow用户
提问于 2013-09-02 08:11:30
回答 3查看 546关注 0票数 0

我知道在bash中我可以打印一条彩色的字符串,就像:

代码语言:javascript
运行
复制
echo -e "\033[33;1mhello\033[0m"

外壳中的输出将是金色的hello。但是,当我将输出重定向到文件test.txt时,\033[33;也会出现在文本文件中。但是,grep --color=auto命令不会将这些字符重定向到文本文件中。它怎么能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-02 08:14:20

它可能在stdout文件描述符(即1)上使用isatty(3)库函数。所以用吧

代码语言:javascript
运行
复制
if (isatty(STDOUT_FILENO)) {
   // enable auto colorization
}

在你的C代码中。

在shell脚本中,使用tty(1)命令:

代码语言:javascript
运行
复制
if tty -s ; then
  # enable auto colorization
fi

或者简单地说是-t 试验(1)

代码语言:javascript
运行
复制
if [ -t 1 ]; then
  # enable auto colorization
fi
票数 1
EN

Stack Overflow用户

发布于 2013-09-02 08:24:54

这个怎么样?

代码语言:javascript
运行
复制
#!/bin/bash

if [ -t 1 ]; then
    echo -e "\033[33;1mhello\033[0m"
else
    echo hello
fi

这里的解释是:

test -t <fd>的短形式是[ -t <fd> ],它检查描述符<fd>是否是终端。来源:help test

票数 3
EN

Stack Overflow用户

发布于 2013-09-02 08:38:07

使用带有导出标志的GREP_COLORS变量。对此进行了测试,它起了作用:

代码语言:javascript
运行
复制
export GREP_COLORS='ms=01;33'
grep --color=auto -e hello
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18568426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档