如何进行邻近文本搜索(2 个以上单词)?

如何进行邻近文本搜索(2 个以上单词)?

执行邻近文本搜索的 Linux 终端命令是什么?

递归地搜索目录中包含:
2单词或更多
99单词的文件,这些单词之间的字符数
不得超过上述单词的任意顺序。

示例 1:
按城市和名字搜索
Berlin
Bob

以上输入找到一个文件,其中包含
BobSmith
123 Main Street Apt. 101
BerlinOhio USA 54321
电话...
电子邮件...

问题——灵感来自:
example2 正在运行,在网页上,不是所需的本地磁盘:
搜索2词语:
living
soul
https://www.biblegateway.com/quicksearch/?quicksearch=living+soul&resultspp=250&version=NIV

找到 4 节经文,下面是按单词输入
的反向顺序引用的 1 句:2
soul
living

诗篇 84:2
soul切慕耶和华的院宇,甚至昏迷;
我的心肠和我的肉体向神呼吁living

而不是上面的网页邻近文本搜索......

在本地磁盘上执行
2+ 词、邻近文本搜索的 Linux 终端命令是什么?

使用
操作系统:Kubuntu 22.04.4 LTS x86_64

显示在上面:
neofetch --stdout |grep 'OS:'

--

答案1

您可以使用“find-”、“exec”和“grep”的组合轻松实现这一点。

逻辑如下:

  1. 在特定路径/目录中递归查找所有文件
  2. 对于每个文件,执行一个 grep 命令
  3. 对于每个 grep 的内容,还包括匹配后的几行(例如 2)。

该命令将是(在你的 Linux Shell 中):

find /some/path/ -type f -exec egrep -hi -A2 "bob|berlin" {} +;

请注意,使用 grep:

  • 选项 A:比赛结束后显示 X 行
  • 选项 B:在比赛前显示 X 行
  • 选项 C:在匹配前后显示 X 行

希望能帮助到你。

编辑:如果您想显示具有您正在寻找的两个值的文件中的匹配数据,您可以尝试以下操作:

grep -lri "bob" $(grep -lri "berlin" /some/path/) | xargs egrep -Hi -A2 "bob|berlin"

一些解释:

  • 这段代码grep -lri "bob" $(grep -lri "berlin" /some/path/)将返回与您要查找的字符串 (bob & berlin) 匹配的所有文件路径。
  • 该代码片段xargs egrep -Hi -A2 "bob|berlin"采用输入文件路径(xargs)并显示包含 bob 或 berlin(不区分大小写)的任何行 + 之后 2 行 + 行来源的文件路径。
  • 选项 l(grep):返回文件名而不是内容。
  • 选项 r (grep):在文件夹中进行递归搜索
  • 选项 i (grep):不区分大小写。无论找到什么字母大小写,Grep 都会匹配搜索。
  • 选项 H(grep):在输出中添加与结果匹配的文件路径作为前缀。

希望能够提供更多帮助。

相关内容