`highlight`命令


11

在将整个字符串传递到stdout时,是否可以使用命令轻松突出显示(带有颜色,粗体文本或反向的前/后背景)特定字符串?我正在考虑构建它,但是如果它已经存在,我宁愿使用它。一些理想的功能:

  1. 单独的突出显示字符串以自动方式以不同的方式突出显示。例如,第一个字符串将以红色突出显示,第二个字符串以绿色突出显示,第三个字符串以蓝色突出显示(无需手动配置)
  2. 检测颜色支持并退回到可用的粗体/反转/其他突出显示方法。
  3. 允许匹配正则表达式和文字字符串。
  4. 如果匹配重叠,最好做一些聪明的事情,例如“ foobar”和“ barbar”。
  5. 除了添加颜色代码外,在stdin和stdout之间没有任何修改。


噢,好问题。我需要这个确切的东西并最终编写了一些东西,但它只是用颜色编码的固定字符串,它没有您列出的任何功能
Michael Mrozek

与其编写新的实用程序,不如将其视为grep本身的补充,真是太棒了。
mattdm 2011年

1
正确的unix原理将是可以从grep以及其他流中通过管道进行传输的新实用程序。我怀疑至少有一个或多个Perl模块可以为您做到这一点,但是……
Shadur 2011年

1
@吉尔斯:这个问题的范围更加有限。实际上,阅读它是我提出此问题的原因之一-寻求更通用,更灵活的解决方案。
2011年

Answers:


4

也许是拉多万·加拉比克(RadovanGarabík)的通用增色剂(grc)?它期望将配置文件作为参数并与regexp一起使用。因此,在没有配置的情况下并不是完全可以的,但是您可以使用流程过程替换(<(list)),因此在没有手动配置的情况下,一定要::)


为了澄清而不需要打开页面(并使它可搜索),“ this one” == Generic Colouriser ; grcgrcat ...谢谢,我喜欢它。
Peter.O 2011年

grc有一个辅助脚本:grcat。这是将所有大写字母都涂成红色的示例。步骤1:设置配置文件:printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps 步骤2;使用它:echo Hello World | grcat red-caps...手册页指出了要搜索的3个配置目录,然后建议(?)配置文件可以是绝对路径,但是查找配置文件的最后一种方法仅适用于我的相对路径(grc版本1.3)
Peter.O 2011年

5

抢救!

您可以改进它(因为它确实需要它),但是效果很好。

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

为简单起见,hilight接受一对参数(首先是匹配项,其次是颜色)在此脚本中,attrib始终为粗体

阅读man console_codes(Graphic Rendition)以查看颜色逃逸现象,或者尝试一下

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
  done
done

使用此方法有重要的缺点:

$ dmesg | hilight \\[ 34 ] 34

但这根本不是:

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

因为[:digit:]在以前的机构中找到逃生安全证中的数字。

就像是:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

将始终按例外运行。

通过使用时间命令,我发现此时间增加了四倍,这并不是太多。

您可以将sed命令替换为您喜欢或满足您需要的其他任何解析器(awk等)。



1

clide 效果很好。我在RHEL 6.2上从EPEL存储库中使用它


+1是一个非常好的工具。不幸的是,它并没有要求的所有功能。
l0b0 2012年

1

如果您使用的版本grep带有颜色,则可以使用regexp更改使grep突出显示文本,并匹配每行,以便不排除任何内容。以下应该可以解决问题:

<your command> |grep "highlightme\|^"

0

正如您在链接中提到的那样,grep --color=always仅适用于一种模式。就是说,我不相信这种工具存在。


0

我使用http://em.readthedocs.org/。由于Python,易于安装在各种平台上。简单,工作正常。


欢迎使用Unix&Linux Stack Exchange!尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
slm

1
根据帮助中心的说法:“但是,您必须在答案中公开您的隶属关系。” 如果您是同一位Igor Kalnitsky撰写人em,请改写您的答案,以明确您不是用户,而是建议工具的作者。
manatwork 2014年
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.