9.2-grep命令(中)

本文详细介绍如何利用grep命令的多种选项,如-n、-v、正则表达式等,进行精确的文本搜索与过滤。通过实例演示如何查找特定关键词、排除关键词、匹配数字与非数字、以及处理行首与特殊字符,适用于系统管理员与程序员提高文本处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-n 'root' 过滤出带有某个关键词的行,并输出行号

[root@evan-01 grep]# grep -n 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@evan-01 grep]# 

-nv 'nologin' 过滤出不带有某个关键词的行,并输出行号

[root@evan-01 grep]# grep -nv 'nologin' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/NOLogin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
20:evan1:x:1000:1000::/home/evan1:/bin/bash
21:evan2:x:1001:1001::/home/evan2:/bin/bash
22:user1:x:1002:1002::/home/user1:/bin/bash
23:user2:x:1004:1005::/home/user2:/bin/bash
25:user4:x:1007:1007::/home/user4:/bin/bash
[root@evan-01 grep]#

-n '[0-9]' 过滤出所有包含数字的行,并输出行号

[root@evan-01 grep]# grep -n '[0-9]' /etc/inittab
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
[root@evan-01 grep]#

-nv '[0-9]' 过滤出所有不包含数字的行,并输出行号

[root@evan-01 grep]# grep -nv '[0-9]' /etc/inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
11:#
12:# To view current default target, run:
13:# systemctl get-default
14:#
15:# To set a default target, run:
16:# systemctl set-default TARGET.target
17:#
[root@evan-01 grep]# 

可以看到第9和第10行没有了

-n '^#' 过滤出所有以 # 开头的行,并输出行号
查看以 # 开头的行,并输出行号

[root@evan-01 grep]# grep -n '^#' /etc/inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
11:#
12:# To view current default target, run:
13:# systemctl get-default
14:#
15:# To set a default target, run:
16:# systemctl set-default TARGET.target
17:#
[root@evan-01 grep]#

我们发现这个文件所有行中都有 # ,接下来,我们 cp 一份这个文件,然后对它进行一下编辑

[root@evan-01 grep]# cp /etc/inittab .
[root@evan-01 grep]# ls
inittab  passwd
[root@evan-01 grep]# vi inittab

手动添加一行,并保存退出。
在这里插入图片描述

[root@evan-01 grep]# grep -n '^#' /etc/inittab
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
11:#
12:# To view current default target, run:
13:# systemctl get-default
14:#
15:# To set a default target, run:
16:# systemctl set-default TARGET.target
17:#
[root@evan-01 grep]#

我们发现,我们最后添加的那行是没有展示的

过滤掉以 # 开头的行,并输出行号

[root@evan-01 grep]# grep -nv '^#' inittab
18:ahcbabvjjs3761738183
[root@evan-01 grep]# 

过滤掉所有空行和以 # 开头的行

[root@evan-01 grep]# grep -v '^#' inittab | grep -v '^$'
ahcbabvjjs3761738183
[root@evan-01 grep]# 

[^0-9] 匹配非方括号里面的内容
[^] 匹配非方括号里面的内容。就是:只要不是方括号里面的内容都打印出来。
把非数字的内容呈现出来

[root@evan-01 grep]# grep '[^0-9]' inittab

在这里插入图片描述符合条件的字符均已加粗,只有数字没变粗,表明没筛选没有符合条件

^[^0-9] 匹配非方括号里面的内容开头的所有字符
^[^] 匹配非方括号里面的内容开头的所有字符。 只要不是方括号里面的内容所开头的,都打印出来。
把非数字开头的内容呈现出来

[root@evan-01 grep]# grep '^[^0-9]' inittab

在这里插入图片描述符合条件的字符均已加粗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值