‘突出显示’命令

‘突出显示’命令

是否有一个命令可用于轻松突出显示(使用颜色、粗体文本或倒置的后/前景)stdin 中的特定字符串,同时将整个字符串传递到 stdout?我在想建造它,但如果它已经存在,我宁愿使用它。一些理想的功能:

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

答案1

Sed 来救援!

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

$ 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 接受一对参数(第一个是匹配,第二个是颜色)在此脚本中,属性始终为粗体

阅读 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 等...)

答案2

或许Radovan Garabík 的通用调色剂 (grc)?它需要一个配置文件作为参数并与正则表达式一起使用。所以并不是完全没有配置,但你可以使用进程进程替换(<(list)),所以无论如何都不需要手动的配置 :-)

答案3

还可以将egrep与匹配不可打印字符上的每一行的模式一起使用,例如:

dmesg | egrep --color "swap|$"

答案4

克莱德 运行良好。我在 RHEL 6.2 上使用它,来自 EPEL 存储库

相关内容