我正在使用 Ubuntu 16.04。
我想搜索某个单词,但我还希望在终端上输出包含该单词的整个文件,以便我可以看到该单词在文件中的位置。但是,当我使用 时grep
,它只会显示包含该单词的特定句子,而不是整个文件。
我可以使用什么命令来搜索一个单词,同时显示整个文件以及单词所在的位置?
我正在使用 Ubuntu 16.04。
我想搜索某个单词,但我还希望在终端上输出包含该单词的整个文件,以便我可以看到该单词在文件中的位置。但是,当我使用 时grep
,它只会显示包含该单词的特定句子,而不是整个文件。
我可以使用什么命令来搜索一个单词,同时显示整个文件以及单词所在的位置?
grep
你可以使用:或简化形式:
从技术上讲,这也可以:
甚至:
grep -E 'pattern|' file
。pattern
它说有或根本没有图案的线条。所以一切都会匹配。我有
grep
别名grep --color=always
,所以如果你不这样做,你必须自己传递颜色选项。与
less
:因此文件会弹出更少,所需的术语会突出显示,您可以使用n和shift+n在匹配之间跳转。
编辑:我在原始答案中误解了这个问题......我已经对其进行了编辑以产生所需的结果......我只在输出中显示了文件名。我编辑了这个答案以使用该输出通过使用 less 来显示整个文件(正如 Ravexina 的答案所建议的那样)
......此外,这将只返回
less
grep 在搜索目录时匹配的文件(in )(s )。....并且我添加
-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}')
我不喜欢两次输入模式,它可以使用改进
如果您想查看您搜索的文本在文件中的哪个位置,请使用 C 标志。例如:
将显示包含文本的行和预期搜索之前的五行和之后的五行。
为了补充其他答案:您可以在选项中添加“-n”以查看左侧的行号:
将向您显示包含“某物”的行,其中包含 3 行“上下文”(即,匹配“某物”的前后各有 3 行),并且每个显示的行都会在开头附加其行号。