向下滚动手册页,我们看到描述使用线性搜索而不是二进制搜索的这个版本的外观的部分。
这个故事的寓意是先看看当地的手册页。
线性搜索与二进制搜索
二分搜索方法比线性搜索更快、更有效。处理大文件使这一点变得非常明显。二进制搜索的缺点是您的文件必须排序。如果您不想对文件进行排序,请对其副本进行排序,然后将其与Look一起使用。
我们将在本文的其他地方演示这一点。请注意,在Fedora、Manjaro上,以及我期望Linux世界的大多数其他地方,您将需要创建文件的排序副本并使用它。
正在安装Word
Look可以处理您选择的任何文本文件,也可以处理本地字典文件“Words”。
在Manjaro上,您需要安装“Words”文件。使用此命令:
sudo pacman -Syu words
使用环视
对于本文,我们将使用Edward Lear诗歌“the Jumblies”的文本文件。
让我们使用下面的命令来查看它的内容:
less the-jumblies.txt
这是这首诗的第一部分。请注意,我们使用的是Ubuntu,因此文件保持未排序状态。对于Fedora和Manjaro,我们将使用文件的排序副本,本文稍后将介绍该副本。
如果我们寻找以单词“They”开头的词,我们就会发现一些Jumblies做了什么。
look They the-jumblies.txt
Look通过列出以下几行做出回应:
忽略字符大小写
要使Look忽略大小写之间的差异,请使用-f(忽略大小写)选项。我们再次使用“They”作为搜索词,但这一次,它是小写的。
look -f they the-jumblies.txt
这一次,结果包括额外的一行。
在最后一组结果中遗漏了以“They”开头的行,因为它全是大写的,与我们的搜索词“They”不匹配。
忽略大小写允许Look将其包含在结果中。
对排序的文件使用Look
如果您的Linux发行版的Look版本遵循使用二进制搜索的传统行为,则必须对文件进行排序或使用文件的排序副本。
让我们重复该命令来搜索“They”,但这一次是在Manjaro上。
如您所见,没有返回任何结果。但我们知道诗中有几行是以单词“他们”开头的。
让我们对文件做一份分类的复印件。如果要将-f(忽略大小写)或-d(仅限字母数字字符和空格)选项与Look一起使用,则在对文件进行排序时必须使用它们。
o(输出)选项允许您指定排序的行应该添加到的文件名。在本例中,它是“sorted.txt”。
sort -f -d the-jumblies.txt -o sorted.txt
让我们对sorted.txt文件使用Look,然后使用-f和-d选项。
现在,我们得到了我们预期的结果。
仅考虑空格和字母数字
要使Look忽略任何不是字母数字字符或空格的内容,请使用-d(字母数字)选项。
我们来看看有没有以“噢”开头的词。
look -f oh the-jumblies.txt
Look不返回任何结果。
让我们再试一次,告诉Look忽略除字母数字字符和空格以外的任何内容。这意味着字符和符号(如标点符号)将被忽略。
look -f -d oh the-jumblies.txt
这一次,我们得到了一个结果。我们之前没有找到此行,因为引号和感叹号混淆了搜索。
指定终止字符
您可以告诉Look使用特定字符作为终止字符。通常,空格和行尾用作结束字符。
t(终止字符)选项允许我们指定要使用的字符。在本例中,我们将使用撇号字符。我们需要用反斜杠将其引起来,这样Look就知道我们不是在打开字符串。
我们还引用了搜索词,因为它包含一个空格。我们在找两个词。
look -f -t \' "they call" the-jumblies.txt
结果与我们用作终止字符的撇号终止的搜索词匹配。
使用不带文件的查找
如果您没有在命令行中提供文件名,Look将使用单词file。
该命令:
提供以下结果:
这些都是文件中以单词“Circle”开头的所有单词。
不要再看了
这就是所有要看的东西。
一旦您知道不同的Linux发行版有不同的行为,并且您的版本使用的是二进制搜索还是线性搜索,就很容易做到这一点。