在本教程中,我们将学习 “grep” 命令。 Grep 代表 G球状的 r有规律的 电子表情 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 后跟您要查找的内容以及从何处查找。 例如,我要查找字符串 “尼克斯” 在文件.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 区分大小写. 例如,当您搜索 “你”,它不会显示包含大写字母的行,即 Os。
检查以下示例。
$ 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。 看看下面的例子。
$ cat file.txt | grep os ostechnix
现在看看我们有什么。 file.txt 的输出通过管道传送到 grep 中,并显示了 file.txt 中包含字母“os”的单词。
我们还可以在 grep 中使用一些特殊字符或正则表达式。
- ^ – 在行首搜索。
- $ – 在行尾搜索。
- . – 搜索任何字符。
让我向您展示一个示例,以便您了解在何处以及如何使用这些特殊字符。
你已经知道了,我们可以搜索包含字符串的单词 “技术” 像下面。
$ grep tech file.txt ostechnix Ostechnix o$technix technology
但是,如果您只想搜索仅以“tech”一词开头的行呢? 您不想显示包含该字符串的所有单词,而只想显示以字符串“tech”开头的单词。 这也是可能的。 这是特殊字符派上用场的地方。
要在文件的行首搜索与模式“tech”匹配的单词,请运行:
$ grep ^tech file.txt technology
同样,我们可以搜索以特定字母结尾的单词,例如 “X”,如下图。
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
此外,您可以使用以下方法找到包含任何字符的单词 . (点)。
例如,让我们搜索任何具有 “n” 在文件中。
$ grep .n file.txt ostechnix Ostechnix o$technix linux linus unix technology
您现在应该对 grep 的用法有了基本的了解。 让我们继续学习其他两个变体,即 埃格雷普 和 fgrep.
egrep 命令示例
埃格雷普 代表 电子扩展的 格雷普. 它类似于 “抓地力-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 格雷普. 它类似于 “抓地力-F”. fgrep 无法识别正则表达式或特殊字符。 fgrep 可用于您希望评估正则表达式的地方。
例如,我们使用以下命令查找以 “X”.
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
现在使用 fgrep 运行相同的命令。
$ fgrep x$ file.txt
它不会显示任何内容,因为它无法评估特殊字符。
现在让我们看另一个例子。 搜索与字符串匹配的单词 “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 | 推特 | 谷歌加 | 领英 | RSS订阅
祝你有美好的一天!!
CLIegrepfgrepgrepLinuxLinux 命令