在本教程中,我们将学习 “grep” 命令。 grep 代表 G大叶 r常规的 e表达 p林特. 顾名思义,Grep 用于搜索文本文件 常用表达 (不久 正则表达式)。 它在文本文件中打印与给定模式匹配的行。 如果没有给出文件,grep 将在当前目录的文件中递归搜索给定的模式。 Grep有两种变体,即 鹭鸶 和 fgrep. 不推荐使用这些变体,但提供这些变体是为了向后兼容。 您可以分别使用“egrp”和“fgrep”,而不是使用“grep -E”和“grep -F”。 事不宜迟,让我们开始吧。
Grep 命令示例
我有一个文件名为 文件.txt 用一些随机的词。 让我们看一下file.txt:
$ cat file.txt ostechnix Ostechnix o$technix linux linus unix technology hello world HELLO world
要开始搜索,只需键入 grep 后跟您要查找的内容和查找的位置。 为了 example我要寻找字符串 “尼克斯” 在文件.txt 中。 为此,我运行:
$ grep nix file.txt
样本输出:
ostechnix Ostechnix o$technix unix
正如您在上面的输出中看到的,我们得到了两个包含匹配模式“nix”的单词。 如果搜索字符串有两个单词,请在单引号内提及它们,如下所示。
$ grep 'hello world' file.txt hello world
你也可以使用 -n 标志以显示输出中的行号:
$ grep -n nix file.txt
样本输出:
1:ostechnix 2:Ostechnix 3:o$technix 6:unix
当您使用非常长的代码时,这可能很有用。
请注意 grep 区分大小写. 为了 example当你搜索 “操作系统”,它不会显示包含大写字母的行,即 Os。
检查以下 example.
$ grep os file.txt ostechnix
但是,我在 file.txt 中还有一个名为“Ostechnix”的词,但 grep 没有列出它。
但是,如果您想忽略区分大小写,可以使用 “-一世” 像下面这样的标志。
$ grep -i os file.txt ostechnix Ostechn1x
$ grep -i 'hello world' file.txt hello world HELLO world
现在,grep 不关心大小写,我们得到了结果中同时包含大写和小写字母的单词。
我们还可以将命令的输出通过管道传输到 grep。 看看以下 example.
$ cat file.txt | grep os ostechnix
现在看看我们有什么。 file.txt 的输出通过管道传输到 grep 中,并显示了 file.txt 中包含字母“os”的单词。
我们还可以在 grep 中使用一些特殊字符或正则表达式。
- ^ – 在行首搜索。
- $ – 在行尾搜索。
- . – 搜索任何字符。
让我给你看一个 example,因此您可以了解在何处以及如何使用这些特殊字符。
你已经知道了,我们可以搜索包含字符串的单词 “科技” 如下所示。
$ grep tech file.txt ostechnix Ostechnix o$technix technology
但是,如果您只想搜索仅以“tech”一词开头的行怎么办。 您不想显示包含该字符串的所有单词,而只显示开头具有字符串“tech”的单词。 这也是可能的。 这是特殊字符派上用场的地方。
要在文件的行首搜索与模式“tech”匹配的单词,请运行:
$ grep ^tech file.txt technology
同样,我们可以搜索以特定字母结尾的单词,例如 example “X”,如下所示。
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
此外,您可以使用以下方式找到包含任何字符的单词 . (点)。
为了 example,让我们搜索任何具有 “n” 在文件中。
$ grep .n file.txt ostechnix Ostechnix o$technix linux linus unix technology
您现在应该对 grep 的用法有了基本的了解。 让我们继续学习其他两个变体,即 鹭鸶 和 fgrep.
egrep 命令示例
鹭鸶 代表 e扩展的 grep. 它类似于 “grep -E” 命令。 它会做所有 grep 会做的事情。 但是,它提供了一些额外的功能,例如使用复杂的正则表达式,而不是普通的 grep 命令开箱即用。
例如,我们可以搜索任何以 “升” 或者 “哦”.
请记住,我们使用插入符号 (^) 来搜索行首的单词。 因此,我们对上述查询的命令将是:
$ egrep '^(l|o)' file.txt ostechnix o$technix linux linus
看? 我们得到了所有以“l”或“o”开头的单词。 请注意,普通的 grep 命令无法做到这一点。
同样,我们可以搜索以“l”到“u”之间的任何字符范围开头的行。 这意味着,我们将得到以 l、m、n、o、p、q、r、s、t 和 u 开头的行。 结果中将省略其他所有内容。
$ egrep '^[l-u]' file.txt ostechnix o$technix linux linus unix technology
请注意,我使用过 方括号 ([) to search for the range of words. Since grep is case-sensitive, it is not going to find lines that starts with uppercase letters in the given range.
To display all the lines that starts with both upper and lower case letters, we use:
$ egrep '^[l-u]|[L-U]' 文件.txt
或者,
$ egrep '^([l-u]|[L-U])' file.txt
样本输出:
ostechnix Ostechnix o$technix linux linus unix technology HELLO world
看? 现在我们得到了以字符范围“l”到“u”(大写或小写)开头的单词。
fgrep 命令示例
fgrep 代表 Fast grep. 它类似于 “grep -F”. fgrep 无法识别正则表达式或特殊字符。 fgrep 可用于您希望评估正则表达式的地方。
为了 example,我们使用以下命令查找以 “X”.
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
现在使用 fgrep 运行相同的命令。
$ fgrep x$ file.txt
它不会显示任何内容,因为它无法评估特殊字符。
现在让我们看看另一个 example. 搜索与字符串匹配的单词 “o$” 使用 grep 命令,我们执行以下操作:
$ grep o$ file.txt
但是,我们什么也得不到,为什么? 因为,按照上面的命令,我们使用美元符号($)来查找以“o”结尾的单词。 由于 file.txt 中没有以“o”结尾的字符,因此我们什么也得不到。
现在,使用 fgrep 运行相同的命令。
$ fgrep o$ file.txt o$technix
看? 这是我们使用 fgrep 命令的地方。 它只是忽略美元符号(当然是特殊字符)并显示包含字符串“o$”的单词。
有关 grep 的更多详细信息,请键入:
$ grep --help
它将提供所有可能的选择。 或者,参考手册页。
$ man grep
建议阅读:
- 学习有效地使用手册页
grep的词源
Grep 是由 肯汤普森,就是写 Unix 的那个人。 但它为什么以及如何得名呢? 教授 布赖恩·克尼汉 在此视频中解释了 grep 的词源。
就这样。 Grep 是您应该彻底学习的重要命令之一。
您现在知道什么是 grep 以及如何使用它在 GNU/Linux 中搜索具有匹配模式的文本文件。 您还了解了 Grep 是如何得名的。 希望这很有用。
感谢您的光临!
帮助我们帮助您:
- 订阅我们的电子邮件通讯: 立即注册
- 支持 OSTechNix: 通过贝宝捐款
- 下载免费的电子书和视频: TradePub 上的 OSTechNix
- 联系我们: Facebook | Twitter | 谷歌加 | 领英 | RSS订阅
祝你有美好的一天!!