我想在输出文本文件时突出显示一些字符串。例如文字[2]
,quick
和lazy
在:
... => any number of lines with non-matching content
He’s quick but lazy.
...
• The future belongs to those who believe in the beauty of their dreams [2].
...
I’m lazy but quick (2 times faster); is there a difference when "lazy" comes before "quick"?
...
我的直观方法是使用grep
进行着色(事实上,我没有固定使用任何特定的工具):
grep -F -e '[2]' -e 'quick' -e 'lazy' --color file.txt
但它有两个问题:
1.它过滤掉不匹配的行,而我想把它们包含在输出中。
1.它不会突出显示所有匹配的字符串;看起来-e
表达式的提供顺序很重要edit(注意BSD grep
)。
我的预期输出(<...>
代表彩色化)为:
... => any number of lines with non-matching content
He’s <quick> but <lazy>.
...
• The future belongs to those who believe in the beauty of their dreams <[2]>.
...
I’m <lazy> but <quick> (2 times faster); is there a difference when "<lazy>" comes before "<quick>"?
...
2条答案
按热度按时间pvabu6sv1#
将使用
grep
查找并突出显示字符串,然后awk
将打印这些行的grep
输出以及输入文件中的原始行。o4hqfura2#
更新
我发现了一种使用
grep -E
代替grep -F
的方法。作为一个副作用,匹配一个literal字符串将需要它的ERE转义。方法是构建一个由搜索字符串的并集加上一个额外的
$
锚(用于选择“不匹配”的行)组成的正则表达式。因此,要突出显示示例文本中的文字
[2]
、quick
和lazy
,可以用途:编辑:我将
^
锚点替换为$
锚点,因为在macOS上:grep -E '\[2]|quick|lazy|^' --color
不突出显示任何单词grep -E -e '\[2]|quick|lazy' -e '^' --color
分段故障...