红帽挑战赛训练营:02Linux-grep匹配

系列笔记指路

红帽挑战赛训练营:01Linux系统基础命令

前言

本篇文章记录红帽挑战赛,赛前辅导的笔记,文章来源于教案:https://www.wolai.com/7u1ByoiYHD5zxjf3A6y3kd
不得不说,别人的教案就是比自己之前瞎总结的简明扼要,perfect!

本章节内容:讲解grep命令的使用,但不会涵盖grep命令的高级用法,如扩展正则

grep

grep 命令用于查找文件里符合条件的字符串。
-i 忽略大小写
-v 取反
-n 显示行号
-c 统计匹配到的总行数
-o 输出匹配到的字符串,而不输出整行信息

-E 支持扩展正则表达式,也可以写作egrep
变种命令:
egrep(相当于加了选项-e)
fgrep(相当于加了选项-f)
rgrep(相当于加了选项-r)

正则表达式:

^ 行首符
$ 行尾符
^$ 空行
. 任意单字符
[ ] 列表展开,中括号里的内容,多个用逗号做间隔
{ } 前面单个字符的数量

grep练习题1

  1. 显示/etc/group文件中含root的行;
grep "root" /etc/group
  1. 显示/etc/passwd中以rp开头的行;
egrep '^rp' /etc/passwd
# 解释:egrep 相当于 grep -e就是代表用正则表达式匹配字符
# ^   行首符,'^rp'匹配的就是以rp开头的行;
  1. 显示/etc目录下所有的目录文件;
ll /etc | egrep '^d' 
# 解释:通过ll命令显示/etc目录下所有的文件,并通过管道符传给egrep匹配以d开头的目录文件
  1. 带行号打印出/etc/rc.local下的非空行;
cat /etc/rc.local | egrep -v '^$'
# 解释:通过cat查看文件内容,并通过管道符传输给egrep 匹配所有空行,再取反显示所有非空行
  1. 显示出/etc/group下不以 “:” 结尾的行;
 cat /etc/group | egrep -v ':$'
 # 解释:$ 表示结尾,:$ 就是匹配以 : 结尾的行,再用 -v 表示取反,匹配不以 : 结尾的行
  1. 统计出/etc/rc.local下以#开头的行的行数;
 cat /etc/rc.local | egrep -c '^#'
 # -c 就是统计匹配行数的

grep练习题2

1、找出/proc/meminfo文件中,所有以大写或小写S开头的行,至少有三种实现方式

# 1、
  egrep -i '^S' /proc/meminfo
# 2、
  cat /proc/meminfo | egrep -i '^s'
# 3、
  cat /proc/meminfo | egrep '^[sS]'
  
# 练习1能看完,这里也不需要解释

2、显示当前系统上root、centos或user1用户的相关信息……如果没有该用户,则先创建用户后再进行匹配显示;

# 去/etc/passwd匹配显示,\> 匹配单词后面的空字符串
 egrep "^(root|centos|user1\>)" /etc/passwd
#没有就useradd该用户,然后匹配显示
 useradd user1;

3、找出ifconfig命令结果中的IP地址;

ifconfig |grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-4 6-9]\{3\}"

这里想了蛮久,最后参考文章才搞出来https://blog.51cto.com/gotoo/1979005;

4、创建一个文件,将下面内容输入进去;

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
Karen Evich:284-758-2867:23 edgecliff Place, lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 EdgEcliff Place, LinColn, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jess Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000

Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-408-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
Joses Santiago:385-898-8357:38 Fife Way, Abilene, TX39673:1/5/58:95600

1)显示所有包含Parak的行;

touch a.txt
vim a.txt
# 按 i 后粘贴,再按 Esc 输入 :wq 退出即可创建完文件
grep 'Parak' a.txt

2)显示所有以J开头所在的行

egrep "^J" a.txt

3)显示所有以700结尾的行

egrep "700$" a.txt

4)显示所有不包括834的行

grep -v '834' a.txt

5)显示所有这样的行:它包含一个大写字母,后跟四个小写字母,一个空格,和一个大写字母

egrep "[A-Z][a-z]{4}[[:space:]][A-Z]" a.txt

6)显示以K或F或S开头的行

egrep "^(K|F|S)" a.txt

7)显示包括Lane的行的个数

grep -c "Lane" a.txt

8)显示所有包括408或500的行

 egrep "(408|500)" a.txt

9)显示包括Lincoln或lincoln的行,并且grep对大小写不敏感

 egrep -i "(Lincoln|lincoln)" a.txt

总结

没想到一个小小的grep命令玩出花儿来了,我真的栓扣啊,搞了好久好久才写完,难怪单独搞,并且对于教案写的不涉及正则的用法,你真的不会心痛吗?学grep不弄正则你确定?

一篇不错的教程文章https://linux.cn/article-6941-1.html,Linux中国的文章含金量果然高,点个赞!
本次习题有的题参考了文章的讲解才做出来。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值