linux sed

本文详细介绍了SED命令的基础用法及高级技巧,包括行过滤、字符替换、行删除等功能,并通过实例展示了如何灵活运用SED进行文本处理。

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

一、 sed的基本用法
1. sed -n '/root/'p     -n表示只有经过sed 特殊处理的那一行才会被列出来。p表示打印
[root@localhost sed]# sed -n '/root/'p passwd   #过滤passwd文件中带有root的行
root:x:0:0:ROOT:/root:/bin/bash
2. sed -nr    sed也是支持"*""."等符号的,当使用特殊符号比如+号的时候需要脱义或者加上-r参数
1. [root@localhost sed]# sed -nr '/r+t/'p passwd  #加上-r
    rto
2. [root@localhost sed]# sed -n '/r\+t/'p passwd   #未加参数r,使用脱义符号
    rto
3. sed-n ''   可以填写数字打印指定的行
1. [root@localhost sed]# sed -n '3'p passwd      #打印passwd文件中的第三行
    bin:x:1:1:bin:/bin:/sbin/nologin
2. [root@localhost sed]# sed -n '2,5'p passwd    #打印passwd文件中的第2到5行
    ddfffgg
    bin:x:1:1:bin:/bin:/sbin/nologin
    233sss
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
3. [root@localhost sed]# sed -n '27,$'p passwd   #打印passwd文件中的27到最后以行,$表示最后
    lx01:x:1000:1000::/home/lx01:/bin/bash
    lx02:x:1001:1001::/home/lx02:/bin/bash
    lx03:x:1002:1003::/home/lx03:/bin/bash
    sdd:x:1006:1002::/home/lkh:/sbin/nologin
    mk100:x:1007:1007::/home/mk100:/bin/bash
4. sed -e  可以匹配多个条件,如果条件重合那么会打印两次
1. [root@localhost sed]# sed -e '1'p -e '/bus/'p -n passwd   #多个条件,将第1行以及含有bus的行都打印出来
    root:x:0:0:ROOT:/root:/bin/bash
    dbus:x:81:81:System message bus:/:/sbin/nooologin
2. [root@localhost sed]# sed -e '1'p -e '/root/'p -n passwd    #满足第一行且含有root的条件,打印了两次
    root:x:0:0:ROOT:/root:/bin/bash
    root:x:0:0:ROOT:/root:/bin/bash


二、sed的替换
1. I参数      加上大写的I,不区分大小写进行过滤
[root@localhost sed]# sed -n '/bus/'Ip passwd              #在print的时候加上I参数则不区分大小写进行打印
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin:BUS
dbus:x:81:81:System message bus:/:/sbin/nooologin
2. d参数    删除指定的行,只是在打印的时候不显示,实际上并没有将文件删除
[root@localhost sed]# sed '1,28'd passwd        删除passwd文件中的1到28行,打印剩下的行
lx03:x:1002:1003::/home/lx03:/bin/bash
sdd:x:1006:1002::/home/lkh:/sbin/nologin
mk100:x:1007:1007::/home/mk100:/bin/bash
3. sed -i   直接修改读取的文件内容,而不是输出到终端,可以实现真正的删除文件内容
1. [root@localhost sed]# wc -l passwd                          #passwd 显示文件有31行
    31 passwd 
2. [root@localhost sed]# sed -i '1,28'd passwd           #使用sed -i 直接操作文件的内容,加上d参数就是删除,删除1到28行
3. [root@localhost sed]# wc -l passwd                          #passwd文件只剩3行
    3 passwd
4. [root@localhost sed]# cat passwd
    lx03:x:1002:1003::/home/lx03:/bin/bash
    sdd:x:1006:1002::/home/lkh:/sbin/nologin
    mk100:x:1007:1007::/home/mk100:/bin/bash
5. [root@localhost sed]# sed -i '/sdd/'d passwd       #通过指定关键字来删除,删除passwd文件中带有sdd的行
    [root@localhost sed]# cat passwd                            #可以看到sdd的行已经被删除
    lx03:x:1002:1003::/home/lx03:/bin/bash
    mk100:x:1007:1007::/home/mk100:/bin/bash
5. s参数    替换指定的字符
[root@localhost sed]# sed '1,10s/root/qw/g' wd     #将wd文档中1到10行的root替换为qw,s表示替换,g表示全局
qw:x:0:0:qw:/qw:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
6. 将文档中的第一段和最后一段进行替换
[root@localhost sed]# head -n2 wd |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'          
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
7. 将文档中的英文字符全部删除
[root@localhost sed]# head -n2 wd |sed 's/[a-zA-Z]//g'
::0:0::/://
::1:1::/://
8. 在所有行的前面加上固定的字符串
[root@localhost sed]# head -n2 wd |sed -r 's/(.*)/aaa:\1/g'
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值