侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux look命令用法详解:如何在排序过的文件中查找以给定字符串开头的行

Linux look命令介绍

look命令是一个简单但有用的命令,它可以帮助你快速地查找以某个单词或短语开头的文本行。它可以用于查找本地字典文件中的单词,也可以用于查找任何文本文件中的内容。look命令通常使用二分搜索法,这是一种快速而高效的搜索算法,但它要求你的文件必须是排序过的。如果你不想对你的文件进行排序,你可以对它的副本进行排序,然后使用look命令。我们将在本文中演示如何做到这一点。

适用的Linux版本

Linux look命令在不同的Linux发行版上可能有不同的行为。例如,在Ubuntu上,look命令默认使用线性搜索法,这是一种简单但低效的搜索算法,它不要求你的文件必须是排序过的。你可以使用-b选项来强制look命令使用二分搜索法。在Fedora, Manjaro和其他大多数Linux发行版上,look命令默认使用二分搜索法,没有选项可以改变这一点。因此,在使用look命令之前,你最好检查一下你所使用的Linux发行版上look命令的行为和选项。你可以使用以下命令来查看look命令的man手册:

man look

Linux look命令的基本语法

Linux look命令的基本语法如下:

look [-bdf] [-t termchar] string [file...]

其中,-bdf是可选的参数,用于指定look命令的行为和功能。-t termchar是可选的参数,用于指定输入结束符,默认是换行符。string是必需的参数,用于指定要查找的字符串。file...是可选的参数,用于指定要查找的文件,如果没有指定,则默认使用/usr/share/dict/words文件。

Linux look命令的常用选项说明

Linux look命令有以下几个常用的选项:

选项说明
-b使用二分搜索法,要求文件必须是排序过的
-d只比较字母和数字,忽略其他字符
-f忽略大小写差别
-t termchar使用termchar作为输入结束符,默认是换行符

Linux look命令的实例

下面给出一些Linux look命令的实例,以帮助你更好地理解和使用这个命令。

实例1:在字典文件中查找单词

如果你想在字典文件/usr/share/dict/words中查找以某个字符串开头的单词,你可以直接使用look命令加上字符串作为参数。例如,如果你想查找以"linux"开头的单词,你可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ look linux
linux
linuxisms

输出结果显示有两个单词以"linux"开头:linux和linuxisms。

实例2:在文本文件中查找内容

如果你想在一个文本文件中查找以某个字符串开头的行,你需要指定该文本文件作为look命令的参数,并且确保该文本文件是排序过的。否则,look命令可能无法找到所有匹配的行。例如,我们有一个文本文件the-jumblies.txt,它包含了Edward Lear的一首诗"The Jumblies"。我们可以使用sort命令对该文件进行排序,并将排序后的结果保存到一个新的文件the-jumblies-sorted.txt中:

[linux@bashcommandnotfound.cn ~]$ sort the-jumblies.txt > the-jumblies-sorted.txt

然后我们可以使用look命令在排序后的文件中查找以某个字符串开头的行。例如,如果我们想查找以"They"开头的行,我们可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ look They the-jumblies-sorted.txt
They bought a Pig, and some green Jack-daws,
They danced by the light of the moon, the moon, the moon,
They danced by the light of the moon.
They went to sea in a Sieve, they did,
They went to sea in a Sieve.

输出结果显示有五行以"They"开头。

实例3:使用-b选项强制使用二分搜索法

如果你使用的是Ubuntu或其他默认使用线性搜索法的Linux发行版,你可以使用-b选项来强制look命令使用二分搜索法。这样可以提高搜索的速度和效率,但要求你的文件必须是排序过的。例如,我们可以使用以下命令在排序后的文件中查找以"They"开头的行,并使用-b选项:

[linux@bashcommandnotfound.cn ~]$ look -b They the-jumblies-sorted.txt
They bought a Pig, and some green Jack-daws,
They danced by the light of the moon, the moon, the moon,
They danced by the light of the moon.
They went to sea in a Sieve, they did,
They went to sea in a Sieve.

输出结果和不使用-b选项时一样,但搜索速度可能更快。

实例4:使用-d选项忽略非字母数字字符

如果你想在查找字符串时忽略非字母数字字符,如标点符号、空格等,你可以使用-d选项。这样可以让你更容易地找到匹配的行,而不用考虑字符串前后是否有其他字符。例如,我们可以使用以下命令在排序后的文件中查找以"moon"开头的行,并使用-d选项:

[linux@bashcommandnotfound.cn ~]$ look -d moon the-jumblies-sorted.txt
moon,
moon.
moon,
moon.
moon,
moon.
moon.

输出结果显示有七行以"moon"开头,而不管它们前面是否有逗号或空格。

实例5:使用-f选项忽略大小写差别

如果你想在查找字符串时忽略大小写差别,你可以使用-f选项。这样可以让你更容易地找到匹配的行,而不用考虑字符串是否是大写或小写。例如,我们可以使用以下命令在排序后的文件中查找以"they"开头的行,并使用-f选项:

[linux@bashcommandnotfound.cn ~]$ look -f they the-jumblies-sorted.txt
they all came back again,
they all made nests in the trees;
they bought some cheese, and a hive of silvery bees,
they called aloud. 'Our sieve ain't big,
they drank their healths in their walnut-shell!
they drank their soup so nicely,
they played with buttons, strings, and rings;
they sailed away in a Sieve, they did,
they sailed to an island where they soon forgot their fears;
they sang to a small guitar,
they sent some runners to procure
they took some honey, and plenty of money,
they took some pepper and hops,
they went to sea in a Sieve, they did,
They bought a Pig, and some green Jack-daws,
They danced by the light of the moon, the moon, the moon,
They danced by the light of the moon.
They went to sea in a Sieve, they did,
They went to sea in a Sieve.

输出结果显示有19行以"they"或"They"开头。

实例6:使用-t选项指定输入结束符

如果你想在查找字符串时指定一个不同的输入结束符,而不是默认的换行符,你可以使用-t选项。这样可以让你更精确地控制查找的范围,而不用考虑字符串后面是否有换行符或其他字符。例如,我们可以使用以下命令在排序后的文件中查找以"they"开头并以逗号结尾的行,并使用-t选项:

[linux@bashcommandnotfound.cn ~]$ look -t "," they the-jumblies-sorted.txt
they all came back again,
they all made nests in the trees;
they bought some cheese, and a hive of silvery bees,
they called aloud. 'Our sieve ain't big,
they drank their healths in their walnut-shell!
they drank their soup so nicely,
they played with buttons, strings, and rings;
they sailed away in a Sieve, they did,
they sailed to an island where they soon forgot their fears;
they sang to a small guitar,
they sent some runners to procure
they took some honey, and plenty of money,
they took some pepper and hops,
they went to sea in a Sieve, they did,

输出结果显示有14行以"they"开头并以逗号结尾。注意,我们在-t选项后面加了一个空格,然后是逗号,这是为了让look命令识别出逗号作为输入结束符。如果我们不加空格,look命令会认为逗号是字符串的一部分,而不会找到任何匹配的行。

Linux look命令的注意事项

  • Linux look命令在不同的Linux发行版上可能有不同的行为和选项。在使用look命令之前,你最好检查一下你所使用的Linux发行版上look命令的行为和选项。你可以使用man look命令来查看look命令的man手册。
  • Linux look命令通常使用二分搜索法,这是一种快速而高效的搜索算法,但它要求你的文件必须是排序过的。如果你不想对你的文件进行排序,你可以对它的副本进行排序,然后使用look命令。你可以使用sort命令来对文件进行排序,并将排序后的结果保存到一个新的文件中。
  • Linux look命令默认以换行符作为输入结束符,如果需要指定其他字符作为结束符,可以使用-t选项。如果输入的内容中包含结束符,look命令会忽略结束符之后的内容,并将结束符之前的内容显示出来。
  • Linux look命令默认不会忽略大小写差别和非字母数字字符,如果需要忽略大小写差别或非字母数字字符,可以使用-f选项或-d选项。
0

评论区