参考资料
练习题 icon lost
交流讨论
笔记
img lost

Unix/Linux 中的 grep 命令参数及示例用法

作用

Grep 筛选器在文件中搜索特定的字符模式,并显示包含该模式的所有行。在文件中搜索的模式称为 正则表达式. (grep 代表正则表达式的全局搜索和打印输出)。

语法

grep -options(参数) pattern(关键词) files(文本文件)

主要参数

-c :只输出匹配模式的行数
-h :只显示匹配的行,不显示文件名。
-i忽略匹配时的大小写。
-l :只显示文件名列表。
-n :显示匹配的行及其行号
-r :显示文件所在目录即路径。
-v :输出所有不匹配的行。
-e exp : 指定该选项的表达式,可以多次使用。
-f file :指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-E :将样式为延伸的正则表达式来使用。
-w :匹配整个单词。
-r :明确要求搜索子目录。
-d skip :忽略子目录。
-o :只打印匹配行的匹配部分,每个这样的部分在单独的输出行上。
\ :忽略正则表达式中特殊字符的原有含义。
[ ]:单个字符,如[A]即A符合要求。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。
.:所有的单个字符。
*:所有字符,长度可以为0。

-A n : 除了显示符合范本样式的那一行之外,并显示该行之后n
-B n : 除了显示符合范本样式的那一行之外,并显示该行之前n
-C n : 除了显示符合范本样式的那一行之外,并显示该行之前以及之后n

示例命令

  1. 考虑下面的文件作为输入,键入cat > geekfile.txt 后回车;
$ cat > geekfile.txt
  1. 输入如下内容并键入回车;
unix is great os. unix is opensource. unix is free os.
learn operating system.
Linux is a family of open-source Unix-like operating systems based on the Linux kernel.
Unix linux which one you choose.
uNix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.
  1. 在键盘上按下Ctrl+D (或者键入Control-D),保存文本并回到shell提示符。

1、 -i 忽略匹配时的大小写:选项允许在被检索文件中不敏感地搜索字符串大小写。它匹配“UNIX”、“Unix”、“unix”等单词。

$ grep -i "UNix" geekfile.txt

输出:
在这里插入图片描述
2、-c只输出匹配模式的行数: 我们可以找到与给定字符串模式匹配的行数。

$ grep -c "unix" geekfile.txt

输出:
在这里插入图片描述
3、-l显示与模式匹配的文件名: 我们可以只显示包含给定字符串模式的文件。

$ grep -l "unix" *
or
$ grep -l "unix" geekfile.txt f1.txt f2.txt f3.txt

输出:
在这里插入图片描述
在这里插入图片描述
4、-w匹配文件中的整个单词: 默认情况下,grep 匹配给定的字符串/模式,即使它在文件中作为子字符串出现。Grep 的-w选项使它只匹配整个单词。

$ grep -w "unix" geekfile.txt

输出:
在这里插入图片描述
5、-o只打印匹配行的匹配部分: 默认情况下,grep 显示具有匹配字符串的整个行。我们可以使用-o 选项使 grep 只显示匹配的字符串。

$ grep -o "unix" geekfile.txt

输出:
在这里插入图片描述
6、grep -n 输出时显示行号: 显示匹配行的文件及行号。

$ grep -n "unix" geekfile.txt

输出:
在这里插入图片描述
7、-v 反转模式匹配: 可以使用-v 选项显示与指定搜索模式不匹配的行。

$ grep -v "unix" geekfile.txt

输出:
在这里插入图片描述
8、^ 匹配以字符串开头的行: ^ 正则表达式模式指定行的开头。可以在 grep 中使用它来匹配以给定字符串或模式开头的行。

$ grep "^unix" geekfile.txt

输出:
在这里插入图片描述
9、$匹配以字符串结尾的行: $正则表达式模式指定行的结尾。可以在 grep 中使用它来匹配以给定字符串或模式结尾的行。

$ grep "os.$" geekfile.txt

输出:
在这里插入图片描述
10、-e 指定该选项的表达式,可以多次使用:

$ grep –e "unix" –e "linux" –e "open-source" geekfile.txt

输出:
在这里插入图片描述
11、 -f file 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

$ cat > pattern.txt
Agarwal
Aggarwal
Agrawal
$ grep –f pattern.txt  geekfile.txt
$ grep -f pattern.txt  geekfile.txt noSuchFile.txt

输出:
在这里插入图片描述
12、从一个文件中打印 n 行: -A结果后 打印搜索行和 n 行, -B结果前 打印搜索行和 n 行, -C结果前后 打印搜索行和 n 行。

  1. 语法:
$ grep -A[NumberOfLines(n)] [search] [file]  
$ grep -B[NumberOfLines(n)] [search] [file]  
$ grep -C[NumberOfLines(n)] [search] [file]  
  1. 例子:
$ grep -A1 learn geekfile.txt
  1. 输出:
    在这里插入图片描述

13、-r 查找文件所在 目录 即路径:

$ grep –r "linux" ./

输出:
在这里插入图片描述

资料来源 Unix/Linux 中的 grep 命令
博客作者 weixin_43810067
前往答题
我的笔记