一、grep练习

1.找出关于root的行

  1. [root@sclq001 ~]# grep root /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. operator:x:11:0:operator:/root:/sbin/nologin

2.找出root开头的行

  1. [root@sclq001 ~]# grep '^root' /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash

3.匹配以root开头或者以yu开头的行,注意定位锚点

  1. [root@sclq001 ~]# grep -E "^(root|yu)" /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash

4.过滤出bin开头的行,且显示行号

  1. [root@sclq001 ~]# grep -n "^bin" /etc/passwd
  2. 2:bin:x:1:1:bin:/bin:/sbin/nologin

5.过滤出除了root开头的行

  1. [root@sclq001 ~]# grep -v "^root" /etc/passwd

6.统计yu用户出现的次数

  1. [root@sclq001 ~]# grep -c '^yu' /etc/passwd
  2. 0

7.匹配root用户,最多2次

  1. [root@sclq001 ~]# grep -m 2 '^root' /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash

8.匹配多文件,列出存在’root’的文件名字

  1. [root@sclq001 ~]# grep -l 'root' pwssd.txt pwssd2.txt pwssd3.txt
  2. pwssd.txt
  3. pwssd2.txt

9.显示/etc/passwd文件中不以/bin/bash结尾的行

  1. [root@sclq001 ~]# grep -v '/bin/bash$' /etc/passwd

10.找出/etc/passwd文件中的两位数或三位数

  1. [root@sclq001 ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd

11. 找出文件中,以至少一个空白字符开头,后面是非空字符的行

  1. [root@sclq001 dowload]# grep -E '^[[:space:]]+[^[:space:]]' test.txt
  2. like my lover.
  3. He loves his lovers.

12.找出test.txt文件中,所有大小写i开头的行

  1. [root@sclq001 dowload]# grep -i '^i' test.txt
  2. I love my lover.

13.找出系统上root、nobody用户的信息

  1. [root@sclq001 dowload]# grep -E '^\<(root|nobody)\>' /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin

14.找出/etc/init.d/functions文件中的所有函数名

  1. [root@sclq001 dowload]# grep -E '[a-zA-Z]+\(\)' /etc/init.d/functions -o
  2. checkpid()
  3. checkpids()
  4. kill()
  5. run()
  6. pidof()
  7. daemon()
  8. killproc()
  9. pidfileofproc()
  10. pidofproc()

15.找出用户名和shell相同的用户

  1. [root@sclq001 dowload]# grep -E '^(\<[^:]+\>).*\1$' /etc/passwd
  2. sync:x:5:0:sync:/sbin:/bin/sync
  3. shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  4. halt:x:7:0:halt:/sbin:/sbin/halt

二、sed 练习

1.替换文件的root为chaoge,只替换一次,与替换所有

  1. ##替换一次:指每行替换一次
  2. [root@sclq001 ~]# sed 's/root/chaoge/' /dowload/passwd.txt |grep 'chaoge'
  3. chaoge:x:0:0:root:/root:/bin/bash
  4. operator:x:11:0:operator:/chaoge:/sbin/nologin
  1. ## 全部替换,在替换内容后面/跟上g代表全局替换。
  2. [root@sclq001 ~]# sed 's/root/chaoge/g' /dowload/passwd.txt |grep 'chaoge'
  3. chaoge:x:0:0:chaoge:/chaoge:/bin/bash
  4. operator:x:11:0:operator:/chaoge:/sbin/nologin

2.替换文件所有的root为chaoge,且仅仅打印替换的结果

  1. [root@sclq001 ~]# sed 's/root/chaoge/gp' /dowload/passwd.txt -n
  2. chaoge:x:0:0:chaoge:/chaoge:/bin/bash
  3. operator:x:11:0:operator:/chaoge:/sbin/nologin

3.替换前10行bin开头的用户,改为C,且仅仅显示替换的结果

  1. [root@sclq001 ~]# sed '1,10s/^bin/C/gp' /dowload/passwd.txt -n
  2. C:x:1:1:bin:/bin:/sbin/nologin

4.替换前10行b开头的用户,改为C,且将m开头的行,改为M,且仅仅显示替换的结果

  1. [root@sclq001 ~]# sed -n -e '1,10s/^b/C/gp' -e '1,10s/^m/M/gp' /dowload/passwd.txt
  2. Cin:x:1:1:bin:/bin:/sbin/nologin
  3. Mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

5.删除4行后面所有

  1. [root@sclq001 ~]# sed '4,$d' /dowload/passwd.txt
  2. root:x:0:0:root:/root:/bin/bash
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin

6.删除从root开始,到ftp之间的行

  1. [root@sclq001 ~]# sed '/^root/,/^ftp/d' /dowload/passwd.txt
  2. nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
  3. dbus:x:81:81:System message bus:/:/sbin/nologin
  4. systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
  5. systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
  6. tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
  7. polkitd:x:998:996:User for polkitd:/:/sbin/nologin
  8. libstoragemgmt:x:997:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
  9. unbound:x:996:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
  10. setroubleshoot:x:995:991::/var/lib/setroubleshoot:/sbin/nologin
  11. cockpit-ws:x:994:990:User for cockpit web service:/nonexisting:/sbin/nologin
  12. cockpit-wsinstance:x:993:989:User for cockpit-ws instances:/nonexisting:/sbin/nologin
  13. sssd:x:992:988:User for sssd:/:/sbin/nologin
  14. chrony:x:991:987::/var/lib/chrony:/sbin/nologin
  15. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  16. tcpdump:x:72:72::/:/sbin/nologin
  17. nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

7.将文件中空白字符开头的行,添加注释符

  1. [root@sclq001 dowload]# sed -e 's/^[[:space:]]/#/' -e 's/^$/#/' test.txt
  2. #like my lover.
  3. I love my lover.
  4. He likes his lovers.
  5. #He loves his lovers.
  6. #she loves her cat
  7. #
  8. #

8.删除文件的空白和注释行

  1. [root@sclq001 dowload]# sed -e '/^$/d' -e '/^#/d' test.txt
  2. like my lover.
  3. I love my lover.
  4. He likes his lovers.
  5. He loves his lovers.
  6. [root@sclq001 dowload]# sed '/^$/d;/^#/d' test.txt
  7. like my lover.
  8. I love my lover.
  9. He likes his lovers.
  10. He loves his lovers.

9.给文件前三行,添加#符号

  1. [root@sclq001 dowload]# sed '1,3s/\(^.\)/#\1/g' test.txt
  2. # like my lover.
  3. #I love my lover.
  4. #He likes his lovers.
  5. He loves his lovers.
  6. #she loves her cat

10.sed取出ip地址

  1. [root@sclq001 ~]# ifconfig |sed -e '2s/^.*inet\>//' -e '2s/netmask.*$//p' -n
  2. 172.17.255.121

11.找出系统版本

  1. [root@sclq001 ~]# sed -r -n 's/.*release[[:space:]]([^.]).*/\1/p' /etc/centos-release
  2. 8

三、awk练习

1.在当前系统中打印出所有普通用户的用户和家目录(/etc/passwd)

  1. cat /etc/passwd | awk -F ":" '$3>=1000{print $1,"\t\t",$NF}'

2.给/tmp/chaoge.txt文件的前五行,添加#号

  1. [root@sclq001 ~]# awk 'NR<6{print "#",$0}' /tmp/chaoge.txt
  2. # 爱的魔力转圈圈1 爱的魔力转圈圈2 爱的魔力转圈圈3
  3. # 爱的魔力转圈圈4 爱的魔力转圈圈5 爱的魔力转圈圈6
  4. # 爱的魔力转圈圈7 爱的魔力转圈圈8 爱的魔力转圈圈9
  5. # 爱的魔力转圈圈10 爱的魔力转圈圈11 爱的魔力转圈圈12
  6. # 爱的魔力转圈圈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. - 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

  1. - 2.显示Tom的电话

[root@sclq001 ~]# awk -F “[ :]” ‘$1==”Tom”{print $4}’ /tmp/test.txt 926-3456

  1. - 3.显示Nancy的姓名、区号、电话

[root@sclq001 ~]# awk -F “[ :]” ‘$1==”Nancy”{print $1,$2,$3,$4}’ /tmp/test.txt Nancy McNeil [206] 548-1278

  1. - 4.显示所有D开头的姓

[root@sclq001 ~]# awk -F “[ :]” ‘$2~/^D/{print $2}’ /tmp/test.txt Dobbins Dalsass

  1. - 5.显示所有区号是916的人名

[root@sclq001 ~]# awk -F “[ :]” ‘$3==”[916]”{print $1}’ /tmp/test.txt Guy John Elizabeth

  1. - 6.显示Mike的捐款信息,在每一款前加上美元符

[root@sclq001 ~]# awk -F “[ :]” ‘/^Mike/{print “$”$5,”$”$6,”$”$7}’ /tmp/test.txt $250 $100 $175

  1. - 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

  1. - 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 ```