Bash:显示文本文件的内容,突出显示每个单词的出现

Bash:显示文本文件的内容,突出显示每个单词的出现

如何显示文本文件的内容,并突出显示每个出现的单词?

答案1

grep -C $(wc -l foo.txt | cut -d" " -f 1) --color word foo.txt

其中foo.txt是文件路径,word是搜索词。如果您不熟悉grep,请注意搜索词实际上是正则表达式。如果是纯字母数字,这并不重要word,但某些字符(例如[和 )]在正则表达式中具有特殊含义,如果您想按字面意思使用它们,请使用 prefix \。另外,这会穿过外壳,所以$如果没有用 逃脱的话,会做一些有趣的事情\

word如果将其括在引号中,则可以包含空格。

这里使用的其他命令是wccut,它们几乎总是存在于 POSIX 系统(例如 GNU/Linux)上。他们有man解释其用途的页面。

答案2

您只需使用即可做到这一点grepfile.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任意位置的“”。扩展是通过使用未定义的“ \|”序列触发的。

相关内容