- 一、grep练习
- 1.找出关于root的行
- 2.找出root开头的行
- 3.匹配以root开头或者以yu开头的行,注意定位锚点
- 4.过滤出bin开头的行,且显示行号
- 5.过滤出除了root开头的行
- 6.统计yu用户出现的次数
- 7.匹配root用户,最多2次
- 8.匹配多文件,列出存在’root’的文件名字
- 9.显示/etc/passwd文件中不以/bin/bash结尾的行
- 10.找出/etc/passwd文件中的两位数或三位数
- 11. 找出文件中,以至少一个空白字符开头,后面是非空字符的行
- 12.找出test.txt文件中,所有大小写i开头的行
- 13.找出系统上root、nobody用户的信息
- 14.找出/etc/init.d/functions文件中的所有函数名
- 15.找出用户名和shell相同的用户
- 二、sed 练习
- 三、awk练习
一、grep练习
1.找出关于root的行
[root@sclq001 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
2.找出root开头的行
[root@sclq001 ~]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
3.匹配以root开头或者以yu开头的行,注意定位锚点
[root@sclq001 ~]# grep -E "^(root|yu)" /etc/passwd
root:x:0:0:root:/root:/bin/bash
4.过滤出bin开头的行,且显示行号
[root@sclq001 ~]# grep -n "^bin" /etc/passwd
2:bin:x:1:1:bin:/bin:/sbin/nologin
5.过滤出除了root开头的行
[root@sclq001 ~]# grep -v "^root" /etc/passwd
6.统计yu用户出现的次数
[root@sclq001 ~]# grep -c '^yu' /etc/passwd
0
7.匹配root用户,最多2次
[root@sclq001 ~]# grep -m 2 '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
8.匹配多文件,列出存在’root’的文件名字
[root@sclq001 ~]# grep -l 'root' pwssd.txt pwssd2.txt pwssd3.txt
pwssd.txt
pwssd2.txt
9.显示/etc/passwd文件中不以/bin/bash结尾的行
[root@sclq001 ~]# grep -v '/bin/bash$' /etc/passwd
10.找出/etc/passwd文件中的两位数或三位数
[root@sclq001 ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
11. 找出文件中,以至少一个空白字符开头,后面是非空字符的行
[root@sclq001 dowload]# grep -E '^[[:space:]]+[^[:space:]]' test.txt
like my lover.
He loves his lovers.
12.找出test.txt文件中,所有大小写i开头的行
[root@sclq001 dowload]# grep -i '^i' test.txt
I love my lover.
13.找出系统上root、nobody用户的信息
[root@sclq001 dowload]# grep -E '^\<(root|nobody)\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
14.找出/etc/init.d/functions文件中的所有函数名
[root@sclq001 dowload]# grep -E '[a-zA-Z]+\(\)' /etc/init.d/functions -o
checkpid()
checkpids()
kill()
run()
pidof()
daemon()
killproc()
pidfileofproc()
pidofproc()
15.找出用户名和shell相同的用户
[root@sclq001 dowload]# grep -E '^(\<[^:]+\>).*\1$' /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
二、sed 练习
1.替换文件的root为chaoge,只替换一次,与替换所有
##替换一次:指每行替换一次
[root@sclq001 ~]# sed 's/root/chaoge/' /dowload/passwd.txt |grep 'chaoge'
chaoge:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/chaoge:/sbin/nologin
## 全部替换,在替换内容后面/跟上g代表全局替换。
[root@sclq001 ~]# sed 's/root/chaoge/g' /dowload/passwd.txt |grep 'chaoge'
chaoge:x:0:0:chaoge:/chaoge:/bin/bash
operator:x:11:0:operator:/chaoge:/sbin/nologin
2.替换文件所有的root为chaoge,且仅仅打印替换的结果
[root@sclq001 ~]# sed 's/root/chaoge/gp' /dowload/passwd.txt -n
chaoge:x:0:0:chaoge:/chaoge:/bin/bash
operator:x:11:0:operator:/chaoge:/sbin/nologin
3.替换前10行bin开头的用户,改为C,且仅仅显示替换的结果
[root@sclq001 ~]# sed '1,10s/^bin/C/gp' /dowload/passwd.txt -n
C:x:1:1:bin:/bin:/sbin/nologin
4.替换前10行b开头的用户,改为C,且将m开头的行,改为M,且仅仅显示替换的结果
[root@sclq001 ~]# sed -n -e '1,10s/^b/C/gp' -e '1,10s/^m/M/gp' /dowload/passwd.txt
Cin:x:1:1:bin:/bin:/sbin/nologin
Mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
5.删除4行后面所有
[root@sclq001 ~]# sed '4,$d' /dowload/passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
6.删除从root开始,到ftp之间的行
[root@sclq001 ~]# sed '/^root/,/^ftp/d' /dowload/passwd.txt
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:997:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
unbound:x:996:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
setroubleshoot:x:995:991::/var/lib/setroubleshoot:/sbin/nologin
cockpit-ws:x:994:990:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:993:989:User for cockpit-ws instances:/nonexisting:/sbin/nologin
sssd:x:992:988:User for sssd:/:/sbin/nologin
chrony:x:991:987::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
7.将文件中空白字符开头的行,添加注释符
[root@sclq001 dowload]# sed -e 's/^[[:space:]]/#/' -e 's/^$/#/' test.txt
#like my lover.
I love my lover.
He likes his lovers.
#He loves his lovers.
#she loves her cat
#
#
8.删除文件的空白和注释行
[root@sclq001 dowload]# sed -e '/^$/d' -e '/^#/d' test.txt
like my lover.
I love my lover.
He likes his lovers.
He loves his lovers.
[root@sclq001 dowload]# sed '/^$/d;/^#/d' test.txt
like my lover.
I love my lover.
He likes his lovers.
He loves his lovers.
9.给文件前三行,添加#符号
[root@sclq001 dowload]# sed '1,3s/\(^.\)/#\1/g' test.txt
# like my lover.
#I love my lover.
#He likes his lovers.
He loves his lovers.
#she loves her cat
10.sed取出ip地址
[root@sclq001 ~]# ifconfig |sed -e '2s/^.*inet\>//' -e '2s/netmask.*$//p' -n
172.17.255.121
11.找出系统版本
[root@sclq001 ~]# sed -r -n 's/.*release[[:space:]]([^.]).*/\1/p' /etc/centos-release
8
三、awk练习
1.在当前系统中打印出所有普通用户的用户和家目录(/etc/passwd)
cat /etc/passwd | awk -F ":" '$3>=1000{print $1,"\t\t",$NF}'
2.给/tmp/chaoge.txt文件的前五行,添加#号
[root@sclq001 ~]# awk 'NR<6{print "#",$0}' /tmp/chaoge.txt
# 爱的魔力转圈圈1 爱的魔力转圈圈2 爱的魔力转圈圈3
# 爱的魔力转圈圈4 爱的魔力转圈圈5 爱的魔力转圈圈6
# 爱的魔力转圈圈7 爱的魔力转圈圈8 爱的魔力转圈圈9
# 爱的魔力转圈圈10 爱的魔力转圈圈11 爱的魔力转圈圈12
# 爱的魔力转圈圈13 爱的魔力转圈圈14 爱的魔力转圈圈15
3.统计文本信息
- 文件内容:姓名、区号、电话 近三个月捐款信息 ``` ke Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
- 1.显示所有电话号码
[root@sclq001 ~]# awk -F “[ :]” ‘!/^$/{print $4}’ /tmp/test.txt 548-1278 538-2358 654-6279 548-1348 548-1278 343-6410 298-7744 548-1278 348-4278 548-5258 926-3456 440-1763
- 2.显示Tom的电话
[root@sclq001 ~]# awk -F “[ :]” ‘$1==”Tom”{print $4}’ /tmp/test.txt 926-3456
- 3.显示Nancy的姓名、区号、电话
[root@sclq001 ~]# awk -F “[ :]” ‘$1==”Nancy”{print $1,$2,$3,$4}’ /tmp/test.txt Nancy McNeil [206] 548-1278
- 4.显示所有D开头的姓
[root@sclq001 ~]# awk -F “[ :]” ‘$2~/^D/{print $2}’ /tmp/test.txt Dobbins Dalsass
- 5.显示所有区号是916的人名
[root@sclq001 ~]# awk -F “[ :]” ‘$3==”[916]”{print $1}’ /tmp/test.txt Guy John Elizabeth
- 6.显示Mike的捐款信息,在每一款前加上美元符
[root@sclq001 ~]# awk -F “[ :]” ‘/^Mike/{print “$”$5,”$”$6,”$”$7}’ /tmp/test.txt $250 $100 $175
- 7.显示所有人的`姓+逗号+名`
[root@sclq001 ~]# awk -F “[ :]” -v “OFS=,” ‘!/^$/{print $2,$1}’ /tmp/test.txt Harrington,Mike Dobbins,Christian Dalsass,Susan McNichol,Archie Savage,Jody Quigley,Guy Savage,Dan McNeil,Nancy Goldenrod,John Main,Chet Savage,Tom Stachelin,Elizabeth
- 8.删除文件的空白行(awk不修改源文件),替换后的内容重定向写入新文件
[root@sclq001 ~]# awk ‘!/^$/{print $0}’ /tmp/test.txt > /tmp/test2.txt [root@sclq001 ~]# cat /tmp/test2.txt Mike Harrington:[510] 548-1278:250:100:175 Christian Dobbins:[408] 538-2358:155:90:201 Susan Dalsass:[206] 654-6279:250:60:50 Archie McNichol:[206] 548-1348:250:100:175 Jody Savage:[206] 548-1278:15:188:150 Guy Quigley:[916] 343-6410:250:100:175 Dan Savage:[406] 298-7744:450:300:275 Nancy McNeil:[206] 548-1278:250:80:75 John Goldenrod:[916] 348-4278:250:100:175 Chet Main:[510] 548-5258:50:95:135 Tom Savage:[408] 926-3456:250:168:200 Elizabeth Stachelin:[916] 440-1763:175:75:300 ```