15 个对新手和专家都非常有用的 Linux Grep 命令示例

网友投稿 761 2022-05-30

在本文中,让我们了解15 个对新手和专家都非常有用的 Linux grep 命令的实际示例。

首先创建以下 demo_file,将在下面的示例中用于演示 grep 命令。

$ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line.

1. 在单个文件中搜索给定的字符串

grep 命令的基本用法是在指定文件中搜索特定字符串,如下所示。

Syntax: grep "literal_string" filename

$ grep "this" demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.

2. 在多个文件中检查给定的字符串。

Syntax: grep "string" FILE_PATTERN

这也是 grep 命令的基本用法。在本例中,让我们将 demo_file 复制到 demo_file1。grep 输出还将在与特定模式匹配的行前面包含文件名,如下所示。当 Linux shell 看到元字符时,它会进行扩展并将所有文件作为输入提供给 grep。

$ cp demo_file demo_file1 $ grep "this" demo_* demo_file:this line is the 1st lower case line in this file. demo_file:Two lines above this line is empty. demo_file:And this is the last line. demo_file1:this line is the 1st lower case line in this file. demo_file1:Two lines above this line is empty. demo_file1:And this is the last line.

3. 不区分大小写的搜索使用 grep -i

Syntax: grep -i "string" FILE

这也是grep的基本用法。这不区分大小写地搜索给定的字符串/模式。因此,它不区分大小写地匹配所有单词,例如“the”、“THE”和“The”,如下所示。

$ grep -i "the" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. And this is the last line.

4. 匹配文件中的正则表达式

Syntax: grep "REGEX" filename

这是一个非常强大的功能,如果您可以有效地使用正则表达式。在下面的示例中,它搜索所有以“lines”开头并以“empty”结尾的模式,以及中间的任何内容。即在 demo_file 中搜索“lines[anything in-between]empty”。

$ grep "lines.*empty" demo_file Two lines above this line is empty.

来自 grep 的文档:正则表达式后面可以跟几个重复运算符之一:

? 前一项是可选的,最多匹配一次。

* 前面的项目将匹配零次或多次。

+ 前一项将匹配一次或多次。

{n} 前一项正好匹配 n 次。

{n,} 前一项被匹配 n 次或更多次。

{,m} 前一项最多匹配 m 次。

{n,m} 前一项至少匹配 n 次,但不超过 m 次。

5. 使用 grep -w 检查完整的单词,而不是子字符串

如果您想搜索一个词,并避免它与子字符串匹配,请使用 -w 选项。只需进行正常搜索即可显示所有行。

以下示例是常规 grep,它在其中搜索“is”。当您搜索“is”时,如果没有任何选项,它将显示“is”、“his”、“this”以及所有包含子字符串“is”的内容。

$ grep -i "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line.

以下示例是 WORD grep,它仅搜索单词“is”。请注意,此输出不包含“This Line Has All its First Character Of The Word With Big Case”这一行,即使“This”中有“is”,因为以下仅查找单词“is” ”而不是“这个”。

$ grep -iw "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.

6. 使用 grep -A、-B 和 -C 显示比赛前/后/周围的行

在对大文件执行 grep 时,在匹配后查看一些行可能很有用。如果 grep 不仅可以显示匹配行,还可以显示匹配之后/之前/周围的行,您可能会觉得很方便。

请为此示例创建以下 demo_text 文件。

$ cat demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: * e - go to the end of the current word. * E - go to the end of the current WORD. * b - go to the previous (before) word. * B - go to the previous (before) WORD. * w - go to the next word. * W - go to the next WORD. WORD - WORD consists of a sequence of non-blank characters, separated with white space. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.

-A 是在匹配后打印指定的 N 行的选项,如下所示。

Syntax: grep -A "string" FILENAME

以下示例打印匹配的行及其后的 3 行。

$ grep -A 3 -i "example" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.

-B 是在匹配之前打印指定的 N 行的选项。

Syntax: grep -B "string" FILENAME

当您可以选择在匹配后显示 N 行时,您可以使用 -B 选项。

$ grep -B 2 "single WORD" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD

-C 是在匹配之前打印指定的 N 行的选项。在某些情况下,您可能希望匹配显示为两侧的线条。此选项在匹配的两侧(之前和之后)显示 N 行。

$ grep -C 2 "Example" demo_text word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD

7. 使用 GREP_OPTIONS 突出显示搜索

由于 grep 通过您提供的模式/字符串从文件中打印出行,如果您希望它突出显示与该行匹配的部分,那么您需要按照以下方式进行操作。

当您执行以下导出时,您将突出显示匹配的搜索。在以下示例中,当您设置 GREP_OPTIONS 环境变量时,它将突出显示所有这些,如下所示。

$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8' $ grep this demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line.

8.使用grep -r递归搜索所有文件

当您要搜索当前目录及其子目录下的所有文件时。-r 选项是您需要使用的选项。以下示例将在当前目录及其所有子目录中的所有文件中查找字符串“ramesh”。

$ grep -r "ramesh" *

9. 使用 grep -v 反转匹配

您有不同的选项来显示匹配的行、显示匹配前的行、显示匹配后的行以及突出显示匹配。因此,您肯定还希望选项 -v 进行反转匹配。

如果要显示与给定字符串/模式不匹配的行,请使用选项 -v,如下所示。此示例将显示与单词“go”不匹配的所有行。

$ grep -v "go" demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: WORD - WORD consists of a sequence of non-blank characters, separated with white space. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words.

10.显示不匹配所有给定模式的行。

Syntax: grep -v -e "pattern" -e "pattern"

$ cat test-file.txt a b c d $ grep -v -e "a" -e "b" -e "c" test-file.txt d

11.使用grep -c计算匹配的数量

当您想计算与给定模式/字符串匹配的行数时,请使用选项 -c。

Syntax: grep -c "pattern" filename

$ grep -c "go" demo_text 6

当你想找出多少行与模式匹配时

$ grep -c this demo_file 3

当您想要找出与模式不匹配的行数时

$ grep -v -c this demo_file 4

12. 使用 grep -l 仅显示与给定模式匹配的文件名

如果您希望 grep 仅显示与给定模式匹配的文件名,请使用 -l(小写 L)选项。

当您将多个文件作为输入提供给 grep 时,它会显示包含与模式匹配的文本的文件名,当您尝试在整个目录结构中查找一些注释时会非常方便。

$ grep -l this demo_* demo_file demo_file1

13.只显示匹配的字符串

默认情况下,grep 将显示与给定模式/字符串匹配的行,但如果您希望 grep 仅显示模式的匹配字符串,请使用 -o 选项。

当您直接给出字符串时,它可能没有那么有用。但是当您提供正则表达式模式并尝试查看它匹配的内容时,它变得非常有用

$ grep -o "is.*line" demo_file is line is the 1st lower case line is line is is the last line

14.显示匹配在行中的位置

当您希望 grep 显示与文件中的模式匹配的位置时,请使用以下选项作为

Syntax: grep -o -b "pattern" file

$ cat temp-file.txt 12345 12345 $ grep -o -b "3" temp-file.txt 2:3 8:3

注意:上面grep命令的输出不是行中的位置,而是整个文件的字节偏移量。

15.使用grep -n显示输出时显示行号

15 个对新手和专家都非常有用的 Linux Grep 命令示例

显示与行匹配的文件的行号。它对每个文件进行基于 1 的行编号。使用 -n 选项来利用此功能。

$ grep -n "go" demo_text 5: * e - go to the end of the current word. 6: * E - go to the end of the current WORD. 7: * b - go to the previous (before) word. 8: * B - go to the previous (before) WORD. 9: * w - go to the next word. 10: * W - go to the next WORD.

grep Linux 专家

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深入javascript中的exec与match方法
下一篇:Python 内置模块之 re 库,一文搞定正则表达式初阶用法,滚雪球学 Python 第 13 篇
相关文章