Linux 专栏 020 常用命令之 grep

Linux grep 命令 文本搜索 命令行技巧 正则表达式
grep 是 Linux 中用于查找文件中符合条件的字符串的常用命令,常与 sed、awk 并称为“三剑客”。其基本语法为 `grep [选项] 关键字 文件名`。文章详细介绍了 grep 的多种用法:1)打印包含关键字的行;2)打印以某关键词开头或结尾的行;3)不区分大小写搜索;4)显示行号;5)递归搜索子目录;6)统计匹配次数;7)过滤空白行;8)查找包含多个关键字的行。此外,还解释了关键字加引号与不加引号的区别,单引号会对特殊字符转义,双引号则原样输出,不加引号则匹配任意单词。文章还提到 grep 支持正则表达式,并鼓励读者实践更多命令。
文章内容
思维导图
常见问题
社交分享

grep 查找文件中符合条件的字符串,与 sed、awk 组成 Linux 的三剑客,语法格式:grep [选项] 关键字 文件名

在学习之前,我们先了解关键字加引号(单引号,双引号),不加引号的区别

关键字加引号,关键字会被看成一个整体,可以包含空格或特殊字符1)单引号如果关键字包含特殊字符($ 和 ' 除外),使用单引号会对特殊字符转义,进行完全匹配搜索2)双引号关键字即使包含特殊符号,使用双引号原样输出3)不加引号 搜索包含关键字中任意单词的文本行

1、打印包含关键字的行

我们找出文件中包含 root 关键字的行,并打印出来

grep "root" test.txt

2、打印以某关键词开头的行

我们将文件中以 root 开头的行打印出来,此时在关键字前面加上 ^ 符号

grep "^root" test.txt

3、打印某关键词结尾的行

我们将以关键字 bash 的行打印出来,在关键词后面加上 $ 符号

grep "bash$" test.txt

4、不区分大小写打印关键字的行

无论关键字中是否包含大大小写,都会打印出来,以下命令结果打印包含 root ,Root ,ROOT 等等行

grep -i  "root"  test.txt

5、显示行号打印

命令行结果包含关键字的同时,显示行号

grep -n  "root"  test.txt

6、递归打印

我们搜索所有的文件及子目录,包含关键字 root 的行

grep -r  "root"  

7、统计匹配某关键字的次数

此时不会打印整行,只会输出包含 root 的次数

grep -c  "root"  test.txt

8、过滤空白行

我们先输出所有内容,然后键入命令对比后,可以更好展示它们的区别

grep -v  "^$"  test.txt

9、查找包含多个关键字的行

我们查找包含 root 或者 sync 的行,这里 grep -E 等价于 egrep

grep -E  "root|sync" test.txt

上面使用了 Linux 正则表达式,还有更多的 Linux 正则表达式常用元字符如下

以上是常用的用法,下面我使用 GPT 回答该命令的主要用途:

学了就行动起来吧,更多命令,后续更新。

更多命令请前往 :Linux 专栏内容合集

思维导图生成中,请稍候...

问题 1: grep 命令的主要用途是什么?
回答: grep 命令用于在文件中查找符合条件的字符串,是 Linux 中与 sed、awk 并称为“三剑客”的强大工具之一。

问题 2: 关键字加引号和不加引号有什么区别?
回答: 加引号时,关键字会被看成一个整体,可以包含空格或特殊字符;单引号会对特殊字符转义,双引号会原样输出;不加引号则会搜索包含关键字中任意单词的文本行。

问题 3: 如何打印以某个关键词开头的行?
回答: 在关键词前加上 ^ 符号,例如 grep "^root" test.txt,可以打印以 root 开头的行。

问题 4: 如何不区分大小写地查找关键字?
回答: 使用 -i 选项,例如 grep -i "root" test.txt,可以查找包含 rootRootROOT 等不区分大小写的行。

问题 5: 如何显示包含关键字的行号?
回答: 使用 -n 选项,例如 grep -n "root" test.txt,会在结果中显示匹配行的行号。

问题 6: 如何递归查找所有文件和子目录中的关键字?
回答: 使用 -r 选项,例如 grep -r "root",会搜索当前目录及其子目录中所有包含 root 的文件。

问题 7: 如何统计文件中关键字出现的次数?
回答: 使用 -c 选项,例如 grep -c "root" test.txt,会输出文件中 root 出现的次数,而不显示具体行内容。

问题 8: 如何过滤文件中的空白行?
回答: 使用 -v 选项结合 ^$ 正则表达式,例如 grep -v "^$" test.txt,会过滤掉所有空白行。

问题 9: 如何查找包含多个关键字的行?
回答: 使用 -E 选项结合 | 符号,例如 grep -E "root|sync" test.txt,会查找包含 rootsync 的行。

问题 10: grep 命令支持哪些常用的正则表达式元字符?
回答: grep 支持的正则表达式元字符包括 ^(行首)、$(行尾)、.(任意字符)、*(零次或多次匹配)等,具体可参考相关正则表达式文档。