03.grep
# 01.grep作用
**更多详细内容参考:**https://www.cnblogs.com/xiaonq/p/11969744.html
# 1.1 grep作用
- grep命是 文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来 。
- grep家族总共有三个成员构成:grep、egrep、fgrep
- grep 是linux中最为常用的三大文本(awk,sed,grep)处理工具之一
# 1.2 grep常用参数
选项 | 含义 |
---|---|
-v | 排除 |
-n | 显示行号 |
-E | 支持扩展正则表达式(与egrep作用相同) |
-i | ==ignore-case忽略大小写 |
-w | ==word以单词格式查找 |
-c | 统计匹配上的行数(统计包含xxx的有多少行) |
-o | 显示匹配过程 |
# 1.3 grep命令操作练习
#1. 在 dks.txt 文件中匹配上 test 的行数
grep -c "test" dks.txt
#2. 统计在 dks.txt 文件中,test 字符串出现的次数
grep -o "test" dks.txt |wc -l
#3. 打印 test 的行及行号
grep -n "test" dks.txt
#4. 不区分大小写查找 tEst 所有行
grep -i "tEst" dks.txt
#5. 匹配以字符包含test5或test3的行
grep "test[53]" dks.txt
#6. 输出不是以 test开头的行
grep "^[^test]" dks.txt
#7. 匹配 M 或 m 开头的行
grep "^[mM].*" dks.txt
#8. 匹配 K 和 D,并且 K 和 D 中间有两个任意字符
grep "K..D" dks.txt
#9. 匹配大写字母,紧跟 9D 的字符行
grep "[A-Z]9D" dks.txt
#10. 打印 T 字符连续出现 2 次以上的行
grep "T\{2,\}" dks.txt
#11.打印 T 字符连续出现 2 次至 6 次之间的行
grep "T\{2,6\}" dks.txt
#12. 打印空行所在的行号
grep -n "^$" dks.tx
#13. 不匹配文件中的#号和空行
grep -vE "^$|#" dks.txt
#14. 在/data 目录下,匹配文件中包含 db 或者 config 或者 sql 的文件
grep -ra -E "db|config|sql" /data
#15. 匹配 ip 地址
ifconfig eth0 |grep "inet "|grep -E "\<([0-9]{1,3}\.?){4}" -o|head -1
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
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
# 02.grep常用方法
# 2.1 查找包含root字符串的文件
- 1. grep -n 'root' /etc/passwd :查找/etc/passwd下包含 root字符串的文件
[root@linux-node1 /]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
1
2
3
2
3
# 2.2 查找不包含root关键字的行
- 2. grep -Ev "root|nologin" /etc/passwd :查找不包含root和nologin关键字的行
[root@linux-node1 /]# grep -Ev "root|nologin" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
1
2
3
4
2
3
4
# 2.3 包含root关键字的行
- 3.grep "root" /etc/{passwd,shadow} :查找/etc/passwd和/etc/shadow文件中包含root关键字的行
[root@linux-node1 /]# grep "root" /etc/{passwd,shadow}
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
1
2
3
2
3
# 2.4 统计文件包含root字符串行的数量
- 4.grep -c root /etc/passwd :统计/etc/passwd文件中包含root字符串行的数量
[root@linux-node1 /]# grep -c root /etc/passwd # 统计包含root单词的行数
2
[root@redis ~]# grep -o root /etc/passwd | wc -l # 统计root单词出现的次数
4
1
2
3
4
5
2
3
4
5
# 03.grep综合使用
grep -E -v "^$|^#" /etc/nginx/nginx.conf # 去除空号和以#号开头的行
seq 1 20 |grep -m 5 -E '[0-9]{2}' # 输出匹配的前五个结果
seq 1 20 |grep -c -E '[0-9]{2}' # 输出匹配多少行
echo "a bc de" |xargs -n1 |grep '^b' # 匹配以字符串"b"开头的行
echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$' # 匹配以"de"字符串结尾的行
grep -r 'sshd' /etc --include *.conf # 递归搜索/etc 目录下包含 "sshd"字符串 的 conf 后缀文件
seq 41 45 |grep -E '4[12]' # 匹配41/42数字
1
2
3
4
5
6
7
2
3
4
5
6
7
上次更新: 2024/3/13 15:35:10