如何在Linux上使用Look命令

Linux Look命令快速浏览一个文件,并列出以特定单词或短语开头的所有行。但是小心!它在不同的Linux发行版上的行为不同。本教程将向您展示如何使用它。

Ubuntu的Look命令的行为有所不同

对于一个简单但有用的命令,当我研究这篇文章时,Look无疑给了我一个迂回的机会。有两个问题:兼容性和文档。

这篇文章是使用Ubuntu、Fedora和Manjaro检查的,每个发行版都捆绑了一个外观,非常棒。问题是这三个人的行为都不一样。Ubuntu版本则非常不同。根据Ubuntu手册页,这些行为应该是相同的。

我终于想通了。Look传统上使用二进制搜索,而Ubuntu Look使用线性搜索。仿生海狸(18.04)、宇宙乌贼(18.10)和迪斯科野狗(19.04)的在线Ubuntu手册页都说Ubuntu版本使用二进制搜索,但事实并非如此。

如果我们看一看当地的Ubuntu手册页,我们会看到它清楚地说明了他们的外观使用了线性搜索。有一个命令行选项可以强制它使用二进制搜索。其他发行版中的两个版本都没有选择搜索方法的选项。

man look

向下滚动手册页,我们看到描述使用线性搜索而不是二进制搜索的这个版本的外观的部分。

这个故事的寓意是先看看当地的手册页。

线性搜索与二进制搜索

二分搜索方法比线性搜索更快、更有效。处理大文件使这一点变得非常明显。二进制搜索的缺点是您的文件必须排序。如果您不想对文件进行排序,请对其副本进行排序,然后将其与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发行版有不同的行为,并且您的版本使用的是二进制搜索还是线性搜索,就很容易做到这一点。

相关文章