是否有一个命令可以突出显示文本中的某个表达式?
我正在 less 中寻找类似“搜索”功能的东西,但在标准输出上而不是查看器上使用普通文本输出less
。
例子:
$ cat test.txt | highlight "an"
前景一个北约有序撤出阿富汗一个是一个哈米德·卡尔扎伊总统上台后遭遇两次挫折一个对美国军队的限制一个d 塔利班一个停止了和平谈判。
它可以使用颜色或任何其他方式来突出显示指定的正则表达式。
答案1
不确定这是由于某个功能还是只是一些隐藏的副作用,但这在 GNU grep
2.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 或其他位置。