2018-8-18 直播课堂笔记

转眼一周的学习过程又告一段落了,从前面的基础内容到现在真正的关键时候正则表达式,学习从现在开始应该是到了一个真正决定以后工作高度的时候。

首先我们还是回顾一下上次课程内容:

Shell基础 这里主要是几个命令需要了解一下:sort cut uniq tr split

  1. sort 排序,-n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
  2. uniq 去重 -c 统计行数
  3. cut 分割,-d分隔符 -f 指定段号 -c 指定第几个字符
  4. tr 替换字符,tr 'a''b',大小写替换tr '[a-z]' '[A-Z]'
  5. split 切割,-b 大小(默认单位字节),-l行数

1.正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

2.grep

2.1grep 的基本用法:

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

下面这几个是主要参数一定要记住的,其余的可以随时用随时查。

-c 只输出匹配行的计数。

-i 不区分大小写(只适用于单字符)。

-h 查询多文件时不显示文件名。

-l 查询多文件时只输出包含匹配字符的文件名。

-n 显示匹配行及行号。

-s 不显示不存在或无匹配文本的错误信息。

-v 显示不包含匹配文本的所有行。

 

2.2 grep的实例(这里我就找了一些实例题目来看一下具体用法和老师的有点不一样)

扩展内容:需要过滤出自已的IP地址

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ec:fc:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.139.168/24 brd 192.168.139.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feec:fccf/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever

这里我们可以看到我们的是inet 192.168.139.168/24

[root@localhost ~]#  ip addr |grep -B1 'ens33'|awk '/inet/{print $2}'  
192.168.139.168/24

1列:城市位置编号。
2列:月份。
3列:存储代码及出库年份。
4列:产品代号。
5列:产品统一标价。
6列:标识号。
7列:合格数量。

file.txt文件内容:
48      Dec     3BC1977 LPSX   68.00   LVX2A   138
483     Sept    5AP1996 USP    65.00   LVX2C   189
47      Oct     3ZL1998 LPSX   43.00   KVM9D   512
219     dec     2CC1999 CAD    23.00   PLV2C   68
484     nov     7PL1996 CAD    49.00   PLV2C   234
483     may     5PA1998 USP    37.00   KVM9D   644
216     sept    3ZL1998 USP    86.00   KVM9E   234

\>表示后面为空

使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加\ >

1.含有“48”字符串的行的总数 //过滤出所选单词统计行数

[root@localhost ~]# grep -n '48' 2.txt |wc –l

4

2显示含有“48”字符串的所有行的行号

[root@localhost ~]# grep -n '48' 2.txt

1:48      dec     3BC1977 LPSX   68.00   LVX2A   138

2:483     Sept    5AP1996 USP    65.00   LVX2C   189

5:484     nov     7PL1996 CAD    49.00   PLV2C   234

6:483     may     5PA1998 USP    37.00   KVM9D   64

3.精确匹配只含有“48”字符串的行 //"\>"这里将>转义一下表示结束符

[root@localhost ~]# grep -n '48\>' 2.txt

1:48      dec     3BC1977 LPSX   68.00   LVX2A   138

4. 抽取代码为4 8 4和4 8 3的城市位置 

[root@localhost ~]# grep '48[3|4]' 2.txt

483     Sept    5AP1996 USP    65.00   LVX2C   189

484     nov     7PL1996 CAD    49.00   PLV2C   234

483     may     5PA1998 USP    37.00   KVM9D   644

5. 显示使行首不是4

[root@localhost ~]# egrep -nv '^[4|8]' 2.txt

4:219     dec     2CC1999 CAD    23.00   PLV2C   68

7:216     sept    3ZL1998 USP    86.00   KVM9E   234

6.显示含有九月份的行 

[root@localhost ~]# grep -n 'sept' 2.txt
7:216     sept    3ZL1998 USP    86.00   KVM9E   234

7.显示以K开头,以D结尾的所有代码

[root@localhost ~]# grep -e 'K.*D\>' 2.txt

47      Oct     3ZL1998 LPSX   43.00   KVM9D   512

483     may     5PA1998 USP    37.00   KVM9D   644

8.显示头两个是大写字母,中间两个任意,并以C结尾的代码

[root@localhost ~]# grep -e '[A-Z][A-Z]..C\>' 2.txt

483     Sept    5AP1996 USP    65.00   LVX2C   189

219     dec     2CC1999 CAD    23.00   PLV2C   68

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值