如何显示文本文件的内容,并突出显示每个出现的单词?
答案1
grep -C $(wc -l foo.txt | cut -d" " -f 1) --color word foo.txt
其中foo.txt
是文件路径,word
是搜索词。如果您不熟悉grep
,请注意搜索词实际上是正则表达式。如果是纯字母数字,这并不重要word
,但某些字符(例如[
和 )]
在正则表达式中具有特殊含义,如果您想按字面意思使用它们,请使用 prefix \
。另外,这会穿过外壳,所以$
如果没有用 逃脱的话,会做一些有趣的事情\
。
word
如果将其括在引号中,则可以包含空格。
这里使用的其他命令是wc
和cut
,它们几乎总是存在于 POSIX 系统(例如 GNU/Linux)上。他们有man
解释其用途的页面。
答案2
您只需使用即可做到这一点grep
。file.txt
你的文件在哪里以及word
是您要突出显示的文本,您可以使用:
grep --color -E 'word|$' file.txt
这匹配并突出显示了word
。此外,它还可以 ( |
) 匹配并突出显示每行末尾的空字符串 ( $
)。但由于该字符串是空的,因此实际上没有突出显示任何额外的文本。
匹配$
除了word
目的是确保每一行都包含匹配项。然后grep
打印每一行,即使没有-A
、-B
、 或-C
选项或对其他实用程序的任何调用。
该-E
标志将grep
其模式参数解释为POSIX 扩展正则表达式(ERE)。取决于里面的人物word
,您可能希望使其使用基本正则表达式 (BRE)。虽然交替 with|
并不是 POSIX 基本正则表达式的正式一部分,但grep
实现通常支持它作为扩展 with \|
:1
grep --color 'word\|$' file.txt
特别是,在 GNU/Linux 系统上有 GNU Grep,它支持这一点。如果您依赖--color
,您也可能会依赖此行为。
这些命令比中的方式更简单金凤花的答案。但该答案中的技术在某些情况下确实具有明显的优势。由于这里的方法使用|
and $
,因此它们必须真正是正则表达式,而不是固定字符串。然而,随着金发姑娘的方法,您可以添加-F
标志。然后word
可以包含您喜欢的任何文本,甚至\
,只要您引用word
正确地确保外壳将其传递给grep
未经修改的。
例如,您可以使用:
grep --color -FC "$(wc -l < file.txt)" 'word' file.txt
如需进一步阅读,请参阅说服 grep 输出所有行,而不仅仅是那些匹配的行(作为钢铁起子 建议)。
1至标准(IEEE Std 1003.1-2008)指定,交替是 ERE 的一个功能(通过|
),但它是不是BRE 的一个功能。但允许实施\|
随心所欲地解释,许多人将其解释为交替:
一些实现扩展了 BRE 语法以添加交替。例如,子表达式“
\(foo$\|bar\)
”将匹配foo
字符串末尾的“”或bar
任意位置的“”。扩展是通过使用未定义的“\|
”序列触发的。