当前位置:  开发笔记 > 编程语言 > 正文

颜色正则表达式匹配 - 没有丢失未命中

如何解决《颜色正则表达式匹配-没有丢失未命中》经验,为你挑选了2个好方法。

使用时,grep --color=always我可以为正则表达式匹配获得漂亮的颜色突出显示.

但是,grep只返回至少有一个匹配的行.相反,我正在寻找一种方法来简单地突出正则表达式匹配,同时保留所有其他输入,而不丢弃没有任何匹配的行.

我试图使用颜色sed,并阅读grep文档,但我似乎无法得到我想要的.

如果我的描述不明显,我想要:

INPUT:

弗雷德

摊晒

红色

正则表达式:

".*红色"

OUTPUT:

弗雷德(红色)

摊晒

红色(红色)

所以我可以这样做:

list_stuff | color_grep "make_this_stand_out_but_dont_hide_the_rest"

编辑:

我找到了一个不太漂亮的解决方案,但它有效:

感谢:http: //www.pixelbeat.org/docs/terminal_colours/

特别是脚本(我修改/简化):http: //www.pixelbeat.org/talks/iitui/sedgrep

function sedgrep ()
{
    C_PATT=`echo -e '\033[33;01m'`
    C_NORM=`echo -e '\033[m'`

    sed -s "s/$1/${C_PATT}&${C_NORM}/gi"
}

仍在寻找一种更简单的方法来做到这一点!



1> crenate..:

最简单的解决方案是使用egrep --color=always 'text|^'哪个匹配所有行开头但只为所需文本着色.


这对我不起作用,但这样做:egrep --color = always'text | $'顺便说一句,我正在使用zsh.

2> Pawel Wiejac..:

这是我用来着色输出的脚本.

我想我在某种博客或bash/sed教程中找到了这个想法/片段 - 再也找不到它了,这是很久以前的事了.

#!/bin/bash

red=$(tput bold;tput setaf 1)            
green=$(tput setaf 2)                    
yellow=$(tput bold;tput setaf 3)         
fawn=$(tput setaf 3)
blue=$(tput bold;tput setaf 4)           
purple=$(tput setaf 5)
pink=$(tput bold;tput setaf 5)           
cyan=$(tput bold;tput setaf 6)           
gray=$(tput setaf 7)                     
white=$(tput bold;tput setaf 7)          
normal=$(tput sgr0)                      

sep=`echo -e '\001'` # use \001 as a separator instead of '/'

while [ -n "$1" ] ; do
  color=${!1}
  pattern="$2"
  shift 2

  rules="$rules;s$sep\($pattern\)$sep$color\1$normal${sep}g"
done

#stdbuf -o0 -i0 sed -u -e "$rules"
sed -u -e "$rules"

用法:

./colorize.sh color1 pattern1 color2 pattern2 ...

例如

dmesg | colorize.sh red '.*Hardware Error.*' red 'CPU[0-9]*: Core temperature above threshold' \
green 'wlan.: authenticated.*' yellow 'wlan.: deauthenticated.*'

不适用于重叠模式,但我发现它非常有用.

HTH

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有