Linux shell编程学习笔记(九) 流编辑

本文介绍了使用sed流编辑器进行文本模式匹配及awk进行文本处理的方法,包括基本命令使用、字段选择及脚本编写等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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代码块重新定义“:”为分隔符


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值