运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

  • Python

  • Shell

    • 前言

    • shell基础

    • Shell高级

    • shell三剑客

      • grep
        • grep
      • sed
      • awk
  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Shell
  • shell三剑客
lyndon
2022-11-06
目录

grep

# grep

过滤来自一个文件或标准输入匹配模式内容。

除了 grep 外,还有 egrep、fgrep。

egrep 是 grep 的扩展,相当于 grep -E。

fgrep 相当于 grep -f,用的少。

Usage:

grep [OPTION]... PATTERN [FILE]...
1

支持的正则

  • -E,--extended-regexp 模式是扩展正则表达式(ERE)
  • -P,--perl-regexp 模式是 Perl 正则表达式
  • -e,--regexp=PATTERN 使用模式匹配,可指定多个模式匹配
  • -f,--file=FILE 从文件每一行获取匹配模式
  • -i,--ignore-case 忽略大小写
  • -w,--word-regexp 模式匹配整个单词
  • -x,--line-regexp 模式匹配整行
  • -v,--invert-match 打印不匹配的行

输出控制

  • -m,--max-count=NUM 输出匹配的结果 num 数
  • -n,--line-number 打印行号
  • -H,--with-filename 打印每个匹配的文件名
  • -h,--no-filename 不输出文件名
  • -o,--only-matching 只打印匹配的内容
  • -q,--quiet 不输出正常信息
  • -s, --no-messages 不输出错误信息
  • -r,--recursive 递归目录
  • -c,--count 只打印每个文件匹配的行数
  • --include=FILE_PATTERN,只检索匹配的文件
  • --exclude=FILE_PATTERN,跳过匹配的文件
  • --exclude-from=FILE,跳过匹配的文件,来自文件模式
  • --exclude-dir=PATTERN,跳过匹配的目录

内容行控制

  • -B,--before-context=NUM 打印匹配的前几行
  • -A,--after-context=NUM 打印匹配的后几行
  • -C,--context=NUM 打印匹配的前后几行
  • --color[=WHEN], 匹配的字体颜色

示例:

1)输出 b 文件中在 a 文件相同的行
# grep -f a b

2)输出 b 文件中在 a 文件不同的行
# grep -v -f a b

3) 匹配多个模式
# echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc'
a
bc

4)去除空格 http.conf 文件空行或开头#号的行
# grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf

5) 匹配开头不分大小写的单词
# echo "A a b c" |xargs -n1 |grep -i a
或
# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a

6)只显示匹配的字符串
# echo "this is a test" |grep -o 'is'
is
is

7)输出匹配的前五个结果
# seq 1 20 |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14

8)统计匹配多少行
# seq 1 20 |grep -c -E '[0-9]{2}'
11

9) 匹配 b 字符开头的行
# echo "a bc de" |xargs -n1 |grep '^b'
bc

10) 匹配 de 字符结尾的行并输出匹配的行
# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$'
5:abcde

11) 递归搜索/etc 目录下包含 ip 的 conf 后缀文件
# grep -r '192.167.1.1' /etc --include *.conf

12) 排除搜索 bak 后缀的文件
# grep -r '192.167.1.1' /opt --exclude *.bak

13) 排除来自 file 中的文件
# grep -r '192.167.1.1' /opt --exclude-from file

14) 匹配 41 或 42 的数字
# seq 41 45 |grep -E '4[12]'
41
42

15) 匹配至少 2 个字符
# seq 13 |grep -E '[0-9]{2}'
10
11
12
13

16) 匹配至少 2 个字符的单词,最多 3 个字符的单词
# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc

17) 匹配所有 IP
# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

18) 打印匹配结果及后 3 行
# seq 1 10 |grep 5 -A 3
5
6
7
8

19) 打印匹配结果及前 3 行
# seq 1 10 |grep 5 -B 3
2
3
4
5

20) 打印匹配结果及前后 3 行
# seq 1 10 |grep 5 -C 3
2
3
4
5
6
7
8

21) 不显示输出
不显示错误输出:
# grep 'a' abc
grep: abc: No such file or directory

# grep -s 'a' abc
# echo $?
2

不显示正常输出:
# grep -q 'a' a.txt
grep 支持上一章的基础和扩展正则表达式字符。
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
上次更新: 2022/11/06, 20:20:54
shell正则表达式
sed

← shell正则表达式 sed→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式