在文本中突出显示正则表达式的命令?

在文本中突出显示正则表达式的命令?

是否有一个命令可以突出显示文本中的某个表达式?

我正在 less 中寻找类似“搜索”功能的东西,但在标准输出上而不是查看器上使用普通文本输出less

例子:

$ cat test.txt | highlight "an"

前景一个北约有序撤出阿富汗一个一个哈米德·卡尔扎伊总统上台后遭遇两次挫折一个对美国军队的限制一个d 塔利班一个停止了和平谈判。

它可以使用颜色或任何其他方式来突出显示指定的正则表达式。

答案1

不确定这是由于某个功能还是只是一些隐藏的副作用,但这在 GNU grep2.11 中有效:

grep --color 'an\|' test.txt

答案2

确认有一个--passthru选项可以做到这一点:

ack --passthru an test.txt
some_command | ack --passthru an -

答案3

你可以试试我的这个脚本。它可以让您指定一个文件或采用标准输入。您可以为要突出显示的文本定义 Python 正则表达式。突出显示的文本默认为霓虹绿(嘿,我使用黑色背景!)但是您可以更改ANSI 颜色代码

#!/usr/bin/env python

import sys
import re

def highlight_text(text,pat):
    def replacement_funk(matchobj):  return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
    return re.sub(pat,replacement_funk,text)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        input = sys.stdin
        pat = sys.argv[1]
    elif len(sys.argv) == 3:
        input = open(sys.argv[2])
        pat = sys.argv[1]
    else:
        sys.stderr.write("colorme pattern [inputfile]")
    text = input.read()
    print highlight_text(text,pat)

这是一个例子。

blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an

前景一个北约有序撤出阿富汗一个一个哈米德·卡尔扎伊总统上台后遭遇两次挫折一个对美国军队的限制一个d 塔利班一个停止了和平谈判。

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

有序推进的前景北约退出阿富汗由于总统哈米德·卡尔扎伊要求限制美国军队以及塔利班停止和谈,塔利班遭受了两次挫折。

答案4

$cat test.txt | grep --colour=auto -C 100000 an

“颜色”也有效。您还可以定义别名以使 grep 始终使用该选项:

alias grep='grep --colour=auto -C 100000'

将以上内容放在 /etc/profile.d/ 某处或您的 .bashrc 或其他位置。

相关内容