grep的使用方法

img

常用参数

可选参数:

  • -c 统计匹配行的个数
  • -i 忽略大小写匹配
  • -n 显示匹配行行号
  • -x 显示完全匹配的行
  • -v 取反
  • -A 匹配行的后多少行
  • -B 匹配行的前多少行
  • -E 扩展正则

基本使用

  • 命令格式
1
grep [可选参数] "[被过滤字符串]" [文件名称]

-c 统计匹配行的个数

  • 样例文本
1
2
3
4
5
6
7
8
9
 ~/grep  cat a.txt
hello
hello
hello
world
world
world
hello
world
  • 演示案例
1
2
3
4
 ~/grep  grep -c "hello" a.txt
4
~/grep  grep -c "world" a.txt
4

-i 忽略大小写匹配

  • 样例文本
1
2
3
4
5
6
7
8
9
 ~/grep  cat b.txt
hello
Hello
hello
World
World
world
HELLO
WORLD
  • 演示案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 ~/grep  grep -i "HELLO" b.txt
hello
Hello
hello
HELLO
~/grep  grep -i "hello" b.txt
hello
Hello
hello
HELLO
~/grep  grep -i "World" b.txt
World
World
world
WORLD
~/grep  grep -i "worLD" b.txt
World
World
world
WORLD

-n 显示匹配行行号

  • 样例文本
1
2
3
4
5
6
7
8
9
 ~/grep  cat b.txt
hello
Hello
hello
World
World
world
HELLO
WORLD
  • 演示案例
1
2
3
4
5
6
7
8
9
 ~/grep  grep -n "world" b.txt
6:world
~/grep  grep -n "hello" b.txt
1:hello
3:hello
~/grep  grep -n "world" b.txt
6:world
~/grep  grep -n "HELLO" b.txt
7:HELLO

-x 显示完全匹配的行

  • 样例文本
1
2
3
4
5
6
 ~/grep  cat c.txt
hello
HELLO
helloworld
HelloWorld
HELLOWORLD
  • 演示案例

可以观察到,只能显示出完全匹配的行

1
2
3
4
5
6
7
8
 ~/grep  grep -x "hello" c.txt
hello
~/grep  grep -x "HELLO" c.txt
HELLO
~/grep  grep -x "HELLOWORLD" c.txt
HELLOWORLD
~/grep  grep -x "HelloWorld" c.txt
HelloWorld

-v 取反

  • 样例文本
1
2
3
4
5
6
 ~/grep  cat c.txt
hello
HELLO
helloworld
HelloWorld
HELLOWORLD
  • 演示案例
1
2
3
4
5
6
7
8
9
 ~/grep  grep -v "hello" c.txt
HELLO
HelloWorld
HELLOWORLD
~/grep  grep -v "world" c.txt
hello
HELLO
HelloWorld
HELLOWORLD

上面的演示结果是区分大小写的,下面加上-i参数使其不区分大小写

1
2
3
 ~/grep  grep -iv "world" c.txt
hello
HELLO

-A&-B 匹配行的后多少行

-B 和 -A 在某些情况下还是比较有用的,例如在排查日志时,可能就会需要查看指定字段的上下几行来定位程序的错误原因

  • 样例文本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 ~/grep  cat d.txt
a
b
c
d
e
f
g
h
i
j
k
l
m
n
  • 演示案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -A
~/grep  grep -A 3 "g" d.txt
g
h
i
j
~/grep  grep -A 3 "c" d.txt
c
d
e
f

# -B
~/grep  grep -B 3 "g" d.txt
d
e
f
g
~/grep  grep -B 3 "k" d.txt
h
i
j
k

-E 正则表达式

这里直接看下面”正则表达式”中的演示案例

正则表达式

正则表达式的一些基础知识就不在这篇文章中讲解了,若想深入了解可以参考我的另一篇博客”正则表达式”.

这里只举几个简单的例子来让你快速了解上手

以下三个符号表示匹配的次数

  • *:零次或多次匹配前面的字符或表达式
  • +:一次或多次匹配前面的字符或表达式
  • ?:零次或一次匹配前面的字符或表达式

还有一个特殊的符号”.“,可以表示除了换行符以外的任意字符

样本文件

1
2
3
4
5
6
7
8
9
10
 ~/grep  cat demo.txt
hello
Hello
HelloWorld
abcdefg
ABCDEFG
ABcdEFg
abbbbcccc
aaaabbbccc
aaa111bbb222

演示案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 匹配 he + 任意个数的字符
~/grep  grep "he.*" demo.txt
hello

# 匹配 he + 任意数量的英文小写字符
~/grep  grep "he[a-z]*" demo.txt
hello

# 匹配 he + 后面指定数量的英文小写字符
~/grep  grep -Ex "he[a-z]{3}" demo.txt
hello
~/grep  grep -Ex "he[a-z]{2}" demo.txt # 错误示范,找不到指定行

# 匹配全部为大写字母的行
~/grep  grep -x "[A-Z]*" demo.txt
ABCDEFG

# 匹配 1到3个a & 3个b的行
~/grep  grep "a\{1,3\}b\{3\}.*" demo.txt
abbbbcccc
aaaabbbccc

# 完全匹配 1到3个a & 3个b的行
~/grep  grep -x "a\{1,3\}b\{3\}.*" demo.txt
abbbbcccc

# 匹配 h 开头的行
~/grep  grep "^h.*" demo.txt
hello

# 匹配 H 开头的行
~/grep  grep "^H.*" demo.txt
Hello
HelloWorld

# 匹配 H开头 d结尾的行
~/grep  grep "^H.*d$" demo.txt
HelloWorld

本文标题:grep的使用方法

文章作者:尚先森

发布时间:2022年09月06日 - 15:25:53

最后更新:2022年09月07日 - 15:15:10

原始链接:https://imauu.gitee.io/2022/09/06/grep的使用方法/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

尚先森 wechat
有任何问题可以扫描上方二维码私聊我哦😊
您的支持是我创作的最大动力^_^