你的位置:首页 > 操作系统

[操作系统]Linux shell入门基础(八)


八、shell脚本sed&awk
01.sed的使用
流编辑器-Steam Editor
#ed /etc/passwd
1,10p
……
1s/root/byf/p(替换root为byf)
#sed -e 's/root/byf/g' /etc/passwd
(功能同上)
只是显示出来的内容更改
#sed -e 's/root/byf/g' /etc/passwd > /tmp/a
#cp /tmp/a /etc/passwd

#sed -n -e '/\<byf\>/p(打印包含byf单词的行)' /etc/passwd
#sed -n -e '/\<byf\>/d(删除包含byf单词的行)' /etc/passwd

#sed -e '/\<byf\>/s/bash/nologin/g' /etc/passwd > /tmp/a
#cp /tmp/a /etc/passwd(文件替换,相当于修改passwd文件)

#vi /etc/squid/squid.f
#sed -e '/^#/d' -e '/^$/d' /etc/squid/squid.conf |wc -l
(删除#注释行,和以空格开始的行,快速的显示有用的行)

#sed -e '/bash/s/byf/root/g' /etc/passwd
(修改包含bash行的root为byf)

多次替换
#sed -e '' -e ''
#sed -e '::(冒号隔开命令)'
#sed -e '1~2'(执行第1,3,5,……)步长为2

#sed -e 's/root/byf/' -e 's/bash/nologin' /etc/passwd

#vi sss
s/root/byf
s/bash/nologin

#sed -f sss /etc/passwd(结果同上-e '' -e '')
#vi sss
#!/bin/sed -f
s/root/byf
s/bash/nologin

#chmod a+x sss
#./sss /etc/passwd

02.awk的使用
#man sed
#info sed(查看sed的信息功能)
(可以查看到sed的相关例子,*点击enter跳转到指定的sed实例)
sed可以处理行的内容
awk可以处理列的内容
#chkconfig --list |awk '{print $5}'
3:off
3:off
3:on
……
#chkconfig --list | awk '$1=="httpd" {print $5}'
3:on

#if [chkconfig --list | awk '$1="httpd"{print $5}' = "3:on"]; then echo ok; fi
ok

#chkconfig --list |awk '{print $1 " on level "$5}' | head

#chkconfig --list | awk 'BEGIN {iii=0}{if ($5=="3:on")iii=iii+1}END{[print iii}'

#awk 'BEGIN {iii=0}{if ($7=="/bin/bash")iii=iii+1}END {print iii}' < /etc/passwd

#awk -F(以什么作为分隔符,此处为':'): '{print $1 "UID is "$3}' /etc/passwd

写入脚本
#vi aaa
BEGIN
{iii=0}
{if ($5=="3:on")iii=iii+1}
END
{print iii}
:wq
#chkconfig --list | awk -f aaa
日志分析的时候可能会用到awk