基础正则表达式,通过grep选取字符串
1、'' 特定字符串
例:'the'
2、[] 集合字符
例:t[ea]st,test或tast;1o,o之前的字符不能为g;[0-9],任意数字字符串
3、$ 行尾 ^ 行首【^在字符集合符号([])之内表示反向选择,之外表示行首】
例:^the 一行以the开头;.$,表示一行以.号结束
4、. 任意一个字符【绝对有一个任意字符】
例:g.d,g和d之前有一个任意字符;g..d,g和d之前有两个任意字符
5、* 重复字符【重复0或多个前一个重复字符】
例:o,拥有空字符或一个o以上的字符;ooo,至少两个o以上的字符串;g.*g,开头结尾都是g的字符串
6、{} 限定连续重复字符范围,{n,m}连续重复n到m个前一个字符,【{在shell中的特殊意义,所以需要使用转义】
例:o{2},两个o的字符串,看似与ooo*差不多
正则表达式中的符号与通配符意义是不一样的,通配符*表示任意字符(0到多个),通配符中的反向选择为[!a],而正则表示式为2
扩展正则表达式,egrep支持扩展正则表达式
1、+ 重复一个或一个以上的字符
例:go+g,以g开头结尾,中间有一个或以上的o的字符串
2、? 0个或一个字符
例:go?d,gd或god
3、| 用或(or)的方式找出数个字符串
例:gd|good|goooood,或的关系
4、() 找出组字符串
例:g(la|oo|re)d,glad或good或gred;x(abc)+x,以x开头结尾,中间有多个abc的字符串
printf 格式化显示
语法:printf ‘打印格式’实际内容
a 警告声音输出
b 退格键(backspace)
f 清除屏幕(from feed)
n 输出新的一行
r 换行,即enter按键
t 水平的[tab]按键
v 垂直的[tab]按键
xNN NN为两位数的数字,可以转换数字成为字符【x45 输出E】
%ns n为数字,s代表string,即n个字符。
%ni n为数字,i代表integer,即多少个整数数字
%N.nf f代表floating,有小数位数,小数点后保留n位,整个浮点数占N位,多余的空格在数的前面
sed 分析标准输入的数据,然后将数据经过处理后,再将它输出到标准输出。
语法: sed [-nefr] [动作]
-n 使用安静模式,在一般sed的用法中,所有来自STDIN的数据一般都会显示在屏幕上,但如果加上-n参数,则只有经过sed的特殊处理的那一行才会显示出来
-e 直接在命令行模式上进行sed的操作编辑
-f 直接将sed的操作写在一个文件内,-f filename 则可以执行filename内的sed操作
-r sed的操作支持的是扩展正则表达式的语法(默认为基础表达式语法)
[n1[,n2]]function
n1,n2 不一定存在,一般代表“选择进行操作的行数”
function一般有以下操作,务必用’’两个单引号括住:
a 新增,a后面可以接字符串,这些字符串出现在当前的下一行
c 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d 删除,d后面通常不接任何内容
i 插入,i后面可以接字符串,这些字符串出现在当前的上一行
P 打印,打印某个选择的数据,通常会和-n一起运用
s 搜索,不但可以搜索,还可以替换,通常与正则表达式一起运行【1,20s/old/new/g】
如果新增的不只一行,每行之间以反斜线来进行新行的增加
注:sed后面有超过一个以上的操作时,每个操作前需要加上-e
awk 相比常作用于整行处理的sed而言,awk倾向于一行中分成数个“字段”来处理,awk适合处理小型的数据。
语法:awk ‘条件类型1{动作1} 条件类型2{动作2}…’ filename
例:last 取出所有登录者信息
1、last | awk '{print $1 "\t" $3}'
$1,$3分别表示第一栏和第三栏,$0表示一整行数据
2、last | awk '{print $1 "t lines:" NR "t columes:" NF}'
NF 每一行($0)拥有的字段总数,NR 当前awk所处理的是“第几行”数据,FS 当前的分隔符,默认为空格键。
3、last | awk '{FS=":"} NR < 4 {print $1 "\t" $3}'
last | awk 'BEGIN{FS=":"} NR < 4 {print $1 "\t" $3}'
运用awk进行计算时,BEGIN表示预先设置awk变量,第一条命令的输出结果的第一行的分隔符不是:,第二条命令从第一行起分隔符便就是:
注意:awk后续的所有操作用’括住,所以如果想以print显示,记住,非变量的文字部分,包括printf的格式中,都需要使用双引号来定义
(1) 所有的操作即在{}内的操作,如果需要多个命令时,可使用分号分割,或者直接以enter按键来隔开每个命令。
(2) 格式化输出时,printf的格式设置中,务必加上n才能分行
(3) 与bash的变量不同,在awk中,变量可以直接使用,不需要加上$符号
文件比较
1、diff 一般用于ASCII纯文本文件或目录的比较
语法:diff [-bBi] fromfile tofile
-b 忽略一行中的多个空白的差异
-B 忽略空白行的不同
-i 忽略大小写的不同
例:diff -b "about me" "me"
2、cmp 主要用“位”为单位比较
语法:cmp [-s] oldfile newfile
-s 将所有不同点的位都列出来,因为cmp默认仅会输出第一个发现的不同点