如何在文件中搜索单词并且显示整个文件以及找到的单词?

如何在文件中搜索单词并且显示整个文件以及找到的单词?

我正在使用 Ubuntu 16.04。

我想搜索某个单词,但也希望在终端上输出包含该单词的整个文件,以便我可以看到该单词在文件中的位置。但是,当我使用时grep,它只会显示包含该单词的特定句子,而不是整个文件。

我可以使用什么命令来搜索单词,同时显示整个文件以及该单词所在的位置?

答案1

grep可以使用:

$ grep -E -e 'pattern' -e '$' file

或者简化形式:

$ grep -E 'pattern|$' file

从技术上来说这也是可行的:

$ grep -E 'pattern|^' file

甚至:grep -E 'pattern|' file。它表示有模式的线条pattern或根本没有模式的线条。所以一切都会匹配。

我已将grep其别名为grep --color=always,因此如果您没有,则必须自己传递颜色选项。


less

$ less -p 'pattern' file

因此文件会在 less 中弹出,所需的术语会突出显示,您可以使用nshift+n在匹配项之间跳转。

答案2

编辑:我误解了原始答案中的问题....我对其进行了编辑以产生所需的结果...我只在输出中显示文件名。我编辑了这个答案以使用该输出通过使用 less 显示整个文件(如 Ravexina 的答案所建议的那样)
...此外,这将仅返回less在搜索目录时被 grep 匹配的文件(在 中)。...
我添加了-I忽略二进制文件,它们可能会使less交互变得混乱。如果您需要搜索二进制文件或 grep 可能“认为”是二进制的文件,请将其删除。

使用 grep 的“with-filename”标志来显示文件。(该标志是-H

我假设您正在梳理目录及其中的每个文件。如果在当前目录之外搜索,请使用*以防止出现“是目录”错误而无结果。

grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

或者

grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

或者深入到子目录……

grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

我不喜欢两次进入该模式,它可以改进

答案3

如果您想要查看所搜索文本在文件中的位置,请使用 C 标志。例如:

grep -C 5 'MySearchText' *

将显示包含文本的行以及预期搜索的前五行和后五行。

答案4

为了补充其他答案:您可以将“-n”添加到选项中以查看左侧的行号:

grep -n -C 3  "something"  filename

将显示包含“something”的行,其中有 3 行“上下文”(即与“something”匹配的行之前和之后的 3 行),并且显示的每行开头都会附加其行号。

相关内容