Linux look命令遍历文件并列出以特定单词或短语开头的所有行。 但是要当心! 在不同的Linux发行版上,它的行为有所不同。 本教程将向您展示如何使用它。
对于一个简单但有用的命令,当我研究本文时,看起来肯定给了我解决方法。 有两个问题:兼容性和文档。
本文是使用Ubuntu,Fedora和Manjaro进行检查的。look与这些发行版捆绑在一起,很棒。 问题在于这三个行为都不相同。 Ubuntu版本是非常不同的。 根据Ubuntu手册页,行为应相同。
我最终想通了。 look传统上使用二进制搜索,而Ubuntu look使用线性搜索。 针对Bionic Beaver(18.04),Cosmic Cuttlefish(18.10)和Disco Dingo(19.04)的在线Ubuntu手册页都说,Ubuntu版本使用二进制搜索,事实并非如此。
如果我们查看本地的Ubuntu手册页,就会清楚地看到它们的外观使用线性搜索。 有一个命令行选项可以强制它使用二进制搜索。 其他发行版中的两个版本均未提供在搜索方法之间进行选择的选项。
男人看
在手册页中向下滚动,我们看到使用线性搜索而不是二进制搜索描述此版本外观的部分。
这个故事的寓意是首先检查当地的手册页。
二进制搜索方法比线性搜索更快,更高效。 使用大文件使这一点很明显。 二进制搜索的缺点是您的文件必须排序。 如果您不想对文件进行排序,请对文件的副本进行排序,然后将其与look一起使用。
在本文的其他地方很好地演示这一点。 请注意,在Fedora,Manjaro上,我希望在Linux世界的大多数其他地方,您需要创建文件的排序副本并进行处理。
look可以与您选择的任何文本文件一起使用,也可以与本地词典文件中的单词一起使用。
在Manjaro上,您需要安装Word文件。 使用以下命令:
须藤pacman -Syu词
对于本文,请使用Edward Lear诗作The Jumblies的文本文件很好地工作。
让我们用以下命令查看其内容:
少了the-jumblies.txt
这是诗的第一部分。 请注意,它们使用的是Ubuntu,因此该文件保持未排序状态。 对于Fedora和Manjaro,wed处理文件的排序副本,本文稍后将对此进行详细介绍。
如果我们寻找以“他们”一词开头的行,那么就会发现Jumblies所做的一些事情。
看他们the-jumblies.txt
look通过列出以下行来响应:
要使外观忽略大写和小写之间的差异,请使用-f(忽略大小写)选项。 我们再次将它们用作搜索词,但这一次,将其小写。
看-f他们the-jumblies.txt
这次,结果包括额外的一行。
在最后一组结果中缺少以THEY开头的行,因为该行全部大写且与我们的搜索词“他们”不匹配。
忽略大小写允许外观将其包括在结果中。
如果您的Linux发行版的外观符合使用二进制搜索的传统行为,则必须对文件进行排序或使用文件的排序副本。
让我们重复命令搜索它们,但这一次是在Manjaro上。
如您所见,没有结果返回。 但是我们知道这首诗中有以“他们”一词开头的台词。
让我们对文件进行排序后的副本。 如果要在外观上使用-f(忽略大小写)或-d(仅字母数字字符和空格)选项,则在对文件进行排序时必须使用它们。
-o(输出)选项使您可以指定应将已排序行添加到的文件的名称。 在此示例中,其为sorted.txt。
-o(输出)选项使您可以指定应将已排序行添加到的文件的名称。 在此示例中,其为sorted.txt。
让我们使用sorted.txt文件,然后使用-f和-d选项。
现在,我们得到了预期的结果。
要使外观忽略不包含字母数字字符或空格的任何内容,请使用-d(字母数字)选项。
让我们看看是否有任何开头的单词,哦。
看-f哦the-jumblies.txt
外观未返回任何结果。
让我们再试一次,告诉外观忽略字母数字字符和空格以外的任何内容。 这意味着字符和符号(例如标点符号)将被忽略。
看-f -d哦the-jumblies.txt
这次,我们得到了结果。 我们之前找不到这行是因为引号和感叹号混淆了搜索。
您可以告诉外观使用特定字符作为终止字符。 通常,空格和行尾用作终止字符。
-t(终止字符)选项允许我们指定要使用的字符。 在此示例中,将使用撇号字符。 我们需要用反斜杠将其引用,以使您知道未打开字符串。
还引用了搜索词,因为它包含空格。 正在搜索两个词。
看起来-f -t“他们打电话” the-jumblies.txt
结果与搜索词匹配,并以我们用作终止符的撇号终止。
如果您未在命令行上提供文件名,则使用“文件”一词。
命令:
给出以下结果:
这些是文件中所有以单词circle开头的单词。
这就是所有要看的东西。
一旦您知道不同Linux发行版之间存在不同的行为,并且已经确定您的版本是使用二进制搜索还是线性搜索,便非常容易。