真则表达式
真则表达式的语法
.一点代表一个字符
例如.t. 代表3个字符



^ 在行首
用户^代表位置在行的开头
例如:
^zhoutao , 代表zhoutao应该出现在行首才算符合样式,如zhoutao@zhoutao.name  就符合

$在尾部
代表位置在行的最后面
例如:
zhoutao$,代表行的最后面是zhoutao,比如,zhoutao@zhoutao就符合

[...] 字符集合
代表字符串行中的一个字符,长度为一个字符,
例如:
[zhoutao] 代表zhoutao这7个字符中的一个
再如:
[Zz]houtao,代表是zhoutao和Zhoutao

^出现在括号里的第一个位置,代表“非/不是”的意思

*出现0个以上
*代表前面的字符有0个或0个以上
例如zhou*ao 代表这个字符可能出现0个或0个以上,zhoutao zhouttao,zhoutttao都符合要求

\{...\}。指定前面字符的个数
如\{3,5\}。表示前面字符有3个到5个,另外一个例子 [0-9]\{4,9\} 代表数字组成的字符串,长度为4到9位


 \(...\),把比对符合的字符串暂时保存起来
例如Z\(...\)Y,表述要保存Z到Y之间的3个字符
如果要提取保存的字符串,可用位置参数\1代表第一个保存的字符串\2表示第2个


sed的用法
sed是一种非交互式的流编辑器,可动态编辑文件

sed的语法如下
sed ‘样式命令’ 文件
意思是文件中某一行符合“样式”,就执行指定的sed命令,如删除(d)或取代(s),
样式使用一对//含括,表示寻找的意思,也可以指定数据行的反胃,如2,3,表示作用反胃是由第一行到第3行,/ZZZ/,/TTT/表示
作用反胃是从含有zzz的数据行,到含有TTT的数据行

注意:sed不会更改文件内容,sed的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出,因此如果想要存储sed的处理结果,
需要转向将结果存成其他文件



sed的一些用法
1:删除某一段范围的数据行
[root@centos129 tmp]# sed "1,77d" 1  ##删除1文件中的1到77行,余下的显示出来
done

2:把含有“样式”的数据行删除
[root@centos129 tmp]# cat 1
zhoutao
wakaka
fguanghuaijiah
[root@centos129 tmp]# sed "/wa/d" 1 ##把含有wa的那行删掉,余下显示出来
zhoutao
fguanghuaijiah

[root@centos129 tmp]# sed "/[a-z]\{14\}/d" 1 ##把含有14位数的行删除,余下显示出来
zhoutao
wakaka
[root@centos129 tmp]# sed "/^$/d"  1  ##删除文件1中的空白行 ^$分别代表行首和行尾两者之间没有字符,表示该行空白
zhoutao
wakaka
fguanghuaijiah


3:把不含有样式的数据行删除,余下显示出来
[root@centos129 tmp]# sed "/wa/!d" 1  ##!代表否定的意思

4:把含有样式的数据行显示出来
[root@centos129 tmp]# sed "/zhoutao/p" 1  ##p是sed的命令它会把目前的数据显示出来,因为sed默认也会显示 不符合的数据行,所有 加上参数-n
zhoutao
zhoutao
wahaha
fguanghuaijiah
[root@centos129 tmp]# sed -n "/zhoutao/p" 1   ##-n会抑制sed显示出其他资料行的默认操作
zhoutao


5:取代
[root@centos129 tmp]# sed -n "s/zhoutao/taozhou/p" 1   ##s是取代的意思,第一对//中是搜寻的意思,第二对//是置换字符串zhoutao换位taozhou
taozhou
上面这条命令智慧更换第一个出现zhoutao,如果要全部置换,应该在加上全局的命令g,
如:
[root@centos129 tmp]# sed -n "s/zhoutao/taozhou/p" 1
taozhou
[root@centos129 tmp]# sed -n "s/h/M/pg" 1
zMoutao
waMaMa
fguangMuaijiaM
取代的用法还有以下几种
1:sed -n "s/zhoutao//p" 1 #把zhoutao置换为空字符就是删除
2:[root@centos129 tmp]# sed -n "s/^...//pg" 1   ## #把每一行开头的3个字符删掉
utao
aha
anghuaijiah
3: [root@centos129 tmp]# sed -n "s/...$//pg" 1  ##把每一行末尾的3个字符删掉
zhou
wah
fguanghuaij


6:取用符合样式的字符串
[root@centos129 tmp]# sed -n "s/\(zhoutao\)/taozhou/p" 1 ##如果数据行含有zhoutao的字符串,则第一个出现的zhoutao会替换城taozhou
taozhou

7:找到符合样式的数据行后,在进行取代的操作
[root@centos129 tmp]# sed -n "/zhoutao/s/zhoutao/taozhou/p" 1 ##找到zhoutao那一行后然后将zhoutao取代称为taozhou
taozhou

[root@centos129 tmp]# sed -n "/zhoutao/,/waha/s/h/taozhou/p" 1 #将含有zhoutao,和waha的那几行,将其中的h换成taozhou
ztaozhououtao
wataozhouaha

[root@centos129 tmp]# sed -n "1,3s/h/taozhou/p" 1 #第一行到第3行,将h换成周涛
ztaozhououtao
wataozhouaha
fguangtaozhouuaijiah


awk用法
awk是一种可以处理数据,产生格式化报表的语言,功能强大,awk的工作方式是读取数据文件,将每一行数据视为一条记录,没比记录以字段
分隔符分成若干字段,然后输出各个字段的值
如:
[root@centos129 tmp]# netstat -lantp | grep 3306 | awk '{print $7}'
3947/mysqld
[root@centos129 tmp]# ps -auxw | grep mysqld-server | awk '{print $2}'
5360


awk对于每一条记录,都会套用一个“样式{操作}”,如果该行符合样式,就执行指定的操作,



常用的作用格式

awk "样式" 文件 ##把符合样式的数据行显示出来
awk ‘{操作}’ 文件##对每一行都执行{}中的操作
awk '样式 {操作}' 文件##对符合样式的数据行,执行{}中的操作


awk的用法




1:[root@centos129 tmp]# awk "/z/" 1 #显示含有z的数据行
zhoutao

2:[root@centos129 tmp]# awk '{print $1}' 1 #把1中每一行的第一个字段显示出来
zhoutao
wahaha
fguanghuaijiah

3:[root@centos129 tmp]# awk '/zhoutao/{print $1}' 1 #把含有zhoutao数据行的第一个字段显示出来

4:[root@centos129 tmp]# awk -F: '/^root/{ print $1,$2,$3,$4 }' /etc/passwd ##选项F,指定:为分隔符,rootyonghu的1-4个字段显示出阿里
root x 0 0

5:[root@centos129 tmp]# awk -F: 'BEGIN{OFS="--"}/^root/{ print $1,$2,$3,$4 }' /etc/passwd #BEGIN{}区域知识awk,一开始先做初始化的操作设定OFS=--,变量OFS的作用
是存储输出字段的分隔符,接着寻找root开头的帐号行,使用print 打印出1-4个字段,且彼此--隔开
root--x--0--0

例子:
取得网卡ip
[root@centos129 tmp]# ifconfig | grep 'inet addr'|grep Bcast |awk '{print $2}'| awk -F: '{print $2}'
172.16.148.129
172.16.148.133