一 正在表达式简介
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
pattern \ { n \ } 只用来匹配前面pattern出现次数。n为次数
pattern \ { n,\ } 含义同上,但次数最少为n
pattern \ { n,m \ } 含义同上,但pattern出现次数在n与m之间
+ 使用+匹配一个或多个字符。
? 匹配模式出现频率。例如使用/X Y?Z/匹配X Y Z或Y Z。
二 正则表达式使用
1)匹配
为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用i f语句。awk中i f后面的条件用()括起来。
例如,找出姓名为“lby”的记录(仍然以text.txt为例):
[lgm@localhost myShell]$ awk '$0~/lby/' text.txt
lby/23/高中
[lgm@localhost myShell]$ awk '{if($0~/lby/) print $1}' text.txt
lby/23/高中
$0~/lby/ 就表示,text.txt文件中的所有域,只要包含"lby"则提取该记录的数据。
2)不匹配
不匹配的符号式‘!~’,用法和匹配模式一样。
[lgm@localhost myShell]$ awk '{if($0!~/lby/) print $1}' text.txt
dtt/22/高中
只要把正则表达式弄清楚,就可以随便写匹配模式。
1.找出第一个域,值以“t”结尾的记录
[lgm@localhost myShell]$ awk -F/ '{if($1~/t$/) print $0}' text.txt
dtt/22/高中