1、sed流编辑器
按照顺序对每一行执行命令,然后将结果写入标准输出,不修改输入文件,如:
book@wzs:~/work/tq210/shell$ cat aa
line1
line2
line3
line4
line5
book@wzs:~/work/tq210/shell$ sed -e 'd' aa
book@wzs:~/work/tq210/shell$ sed -e '2d' aa
line1
line3
line4
line5
book@wzs:~/work/tq210/shell$ sed -e '2,4d' aa
line1
line5
book@wzs:~/work/tq210/shell$
其中,'d'前面的数字表示地址
book@wzs:~/work/tq210/shell$ cat aa
line1
#line2
line3
line4
line5
book@wzs:~/work/tq210/shell$ sed -n -e '2,4p' aa
#line2
line3
line4
book@wzs:~/work/tq210/shell$ sed -n -e '/^#/p' aa
#line2
第一个表示打印第2到4行
第二个表示打印以#开头的行
匹配main函数体,如:
book@wzs:~/work/tq210/shell$ cat aa
#include <>
int main()
{
aaa
bbb
ccc
}
ddd
eee
book@wzs:~/work/tq210/shell$ sed -n -e '/main[[:space:]]*(/, /^}/p' aa
int main()
{
aaa
bbb
ccc
}
book@wzs:~/work/tq210/shell$
第一个规则 '/main[[:space:]]*(/ 表示匹配main后面跟0个或多个空格开始
第二个规则 /^}/p' 表示匹配 以 “}” 开头的行结束
2、awk文本处理
book@wzs:~/work/tq210/shell$ cat aa
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
book@wzs:~/work/tq210/shell$
book@wzs:~/work/tq210/shell$ awk -F":" '{print $1}' aa
root
daemon
bin
sys
sync
games
book@wzs:~/work/tq210/shell$ awk -F":" '{print "USER:" $1"\tSHELL:" $7}' aa
USER:root SHELL:/bin/bash
USER:daemon SHELL:/bin/sh
USER:bin SHELL:/bin/sh
USER:sys SHELL:/bin/sh
USER:sync SHELL:/bin/sync
USER:games SHELL:/bin/sh
book@wzs:~/work/tq210/shell$
第一条命令,打印第1个字段,以“:”作为分隔符
第二条命令,打印第1和第7字段,并添加一些信息
3、awk脚本
可以把awk命令写入脚本文件里,如:
book@wzs:~/work/tq210/shell$ cat fs.awk
BEGIN{
FS=":"
}
{
print "USER:" $1 "\tSHELL:" $7
}
book@wzs:~/work/tq210/shell$
book@wzs:~/work/tq210/shell$ awk -f fs.awk aa
USER:root SHELL:/bin/bash
USER:daemon SHELL:/bin/sh
USER:bin SHELL:/bin/sh
USER:sys SHELL:/bin/sh
USER:sync SHELL:/bin/sync
USER:games SHELL:/bin/sh
book@wzs:~/work/tq210/shell$
其中,BEGIN代码块重新定义“:”为分隔符