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
行
。
示例命令
-
考虑下面的文件作为输入,键入
cat > geekfile.txt
后回车;
-
输入如下内容并键入回车;
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.
-
在键盘上按下
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" *
$ 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查找符合规则条件的文件内容,格式为每行一个规则样式。
$ grep –f pattern.txt geekfile.txt
$ grep -f pattern.txt geekfile.txt noSuchFile.txt
输出:
12、从一个文件中打印 n 行:
-A
在
结果后
打印搜索行和 n 行,
-B
在
结果前
打印搜索行和 n 行,
-C
在
结果前后
打印搜索行和 n 行。
-
语法:
$ grep -A[NumberOfLines(n)] [search] [file]
$ grep -B[NumberOfLines(n)] [search] [file]
$ grep -C[NumberOfLines(n)] [search] [file]
-
例子:
$ grep -A1 learn geekfile.txt
-
输出:
13、
-r
查找文件所在
目录
即路径:
输出: