正则表达式 通配符 awk文本处理工具

目录

什么是正则表达式

概念

正则表达式的结构

正则表达式的组成

元字符

元字符点(.)

代表字符.

点值表示点需要转义  \

r..t  代表r到t之间任意两个字符

过滤出小写

过滤出非小写

space空格  [[:space:]]

表示次数

位置锚定

例: 

分组 或 

扩展

表示邮箱

表示手机号

AWk

格式

选项

表达式

处理动作

例:

awk 常见的内置变量

拓展

awk数组计算   (默认使用关联数组)


什么是正则表达式

概念

正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),又称规则表达式,是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。

正则表达式的结构

shell: /bin/bash

正则表达式:匹配的是文章中的字符

通配符:匹配的是文件名 (?任意单个字符)

元字符:不表示本来的含义,在正则表达式中有特殊含义的字符

正则表达式的组成

1.代表字符     单个任意字符  [ ]单个字符    [a b c] a或b或c

2.表示次数  

3.位置锚定  ^  $

4.分组 或

元字符

. 匹配任意单个字符,可以是一个是汉字

正则表达式 通配符 awk文本处理工具_第1张图片

[ ] 匹配指定范围内的任意单个字符  [af]

正则表达式 通配符 awk文本处理工具_第2张图片

[^]  匹配指定范围外的任意单个字符 [^af]

正则表达式 通配符 awk文本处理工具_第3张图片

元字符点(.)

代表字符.

正则表达式 通配符 awk文本处理工具_第4张图片

点值表示点需要转义  \

正则表达式 通配符 awk文本处理工具_第5张图片

r..t  代表r到t之间任意两个字符

正则表达式 通配符 awk文本处理工具_第6张图片

过滤出小写

正则表达式 通配符 awk文本处理工具_第7张图片

过滤出非小写

正则表达式 通配符 awk文本处理工具_第8张图片

space空格  [[:space:]]

正则表达式 通配符 awk文本处理工具_第9张图片

表示次数

*     表示0到正无穷

.*    表示任意长度的字符 (不包括0次)

\?   可有可无   0或1次

\+   一次及以上, 一次到正无穷   >=1   ( [[:alnum:]]  字母和数字 )

\{3\}   前面字符出现最少三次    \{N\}

\{3,5}  前面字符出现3到5次  \{n,m\}

位置锚定

^ 开头

$ 结尾

^[[:space:]]*$  空白行

\b  字符串开头

\<  字符串开头

\b  字符串结尾

\>  字符串结尾

例: 

词首锚定

词尾锚定

分组 或 

分组  ( ) 使用括号将需要组合的字符  括起来

正则表达式 通配符 awk文本处理工具_第10张图片

或  : \|    

正则表达式 通配符 awk文本处理工具_第11张图片

扩展

grep -E 使用拓展表达式 

egrep  默认使用扩展表达式   (简便操作)

表示邮箱

echo "[email protected]" |grep -E "[[:alnum:]_]+@[[:alnum:]_]+\.[[:alnum:]_]+"
[email protected]

表示手机号

echo "13384402293"|grep -E "\b1[3456789][0-9]{9}\b"
13384402293

AWk

AWK 是一种与语言,文本处理工具  加载一行处理一行

vim 也是文本处理工具  缺点:内存不足时打不开文件   

vim是将整个文件加载到内存中处理,如果内存不够大,无法打开处理文件

akw的内置变量和shell环境中的变量会有冲突 ,必须使用‘  ’单引号

awk 取列   主要功能   

格式

awk  选项  ‘表达式 {处理动作}‘

选项

-F  指定分隔符

-V  指定变量

表达式

awk 的语言的表达式

1.不写没有

2.找到特定行

处理动作

print  打印

prontf  打印

awk ’{print $2}'  以空格为分隔符  取第n列 ,n大于等于0

awk  内置变量

$0(全文)      $1(第一列)    $2(第二列)

例:

  awk 'root‘开头的行{print}'

[root@localhost/lll] # awk '/^root/ {print } ' /etc/passwd
root:x:0:0:root:/root:/bin/bash

awk  内置变量 $0(全文)      $1(第一列)    $2(第二列)

正则表达式 通配符 awk文本处理工具_第12张图片

查看磁盘大小 打印第五行

正则表达式 通配符 awk文本处理工具_第13张图片

awk 常见的内置变量

awk 选项  ‘模式{print }’

FS  指定分隔符   默认空格   与 “-F”作用相同 -v "FS=:"

[root@localhost~] # awk -v FS=':' '{print $1FS$3}' /etc/passwd   
#此处FS 相当于于变量  -v 变量赋值  相当于 指定: 为分隔符
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7

OFS  输出时的分割符

[root@localhost~] # awk -v FS=':' -v OFS='==' '{print $1,$3}' /etc/passwd
root==0
bin==1
daemon==2
adm==3
lp==4
sync==5
shutdown==6
halt==7
mail==8
operator==11
games==12

NF  打印每行有多少字段  倒数第二列 $(NF-1)    倒数第一列$NF

[root@localhost~] # awk -F: '{print NF}' /etc/passwd
7
7
7
7
7
7
7
[root@localhost~] # df |awk '{print $(NF-1) }' #倒数第二行
已用%
14%
0%
0%
1%
0%
1%
4%
1%
1%
1%
18%
1%
0%
[root@localhost~] # df |awk '{print $(NF) }'
挂载点
/
/dev
/dev/shm
/run
/sys/fs/cgroup
/123
/456
/zzz
/mnt
/home
/boot
/run/user/42
/run/user/0

NR  显示行号       awk ‘NR==2 {print $1}' 打印第二行的第一个字段

[root@localhost~] # awk '{print $1,NR}' /etc/passwd   #显示第一列的行号
root:x:0:0:root:/root:/bin/bash 1
bin:x:1:1:bin:/bin:/sbin/nologin 2
daemon:x:2:2:daemon:/sbin:/sbin/nologin 3
adm:x:3:4:adm:/var/adm:/sbin/nologin 4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 5
sync:x:5:0:sync:/sbin:/bin/sync 6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 7
halt:x:7:0:halt:/sbin:/sbin/halt 8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 9
operator:x:11:0:operator:/root:/sbin/nologin 10
[root@localhost~] # awk 'NR==2 {print $1}' /etc/passwd
#只取第二行的第一个字段
bin:x:1:1:bin:/bin:/sbin/nologin

拓展

打印出几点几分到几点几分的日志?

awk '/几点几分/,/几点几分/' 日志文件

awk数组计算   (默认使用关联数组)

关联数组下标为单词

awk  建立数组

[root@localhost~] # awk 'BEGIN {a[1]="lisi"; a[2]="liwu";print a[1],a[2]}'
lisi liwu
awk 'BEGIN {a[1]="lisi"; a[2]="liwu";for(i in a) print a[1],a[2]}'
lisi liwu
lisi liwu

你可能感兴趣的:(正则表达式)