“Sed” shell脚本三剑客

一、Sed概述

Sed是依赖于正则表达式的文本处理工具,可以读取文本内容,根据指定条件对其进行添,删,改,换等操作,被广泛应用于shell脚本以完成自动化处理任务;

Sed在处理数据时默认不直接修改源文件,而是把当前处理的行储存在临时缓存区中,所有的指令都在缓冲区中操作,处理完成后,把缓冲区的内容默认输出到屏幕,接着处理下一行内容,不断重复知道文件末尾,文件本身内容没有改变。

二、Sed基本语法

格式:sed [选项]  [编辑指令]  文件1、2、......

常用选项:

-e     指定要执行的命令,只有一个编辑命令可省略 ;

-n     只输出处理后的行,读入时不显示 ;

-i      直接编辑文件,而不输出结果;

-f      使用指定的脚本来处理输入的文本文件;

-r E  使用拓展正则表达式

-s     将多个文件视为独立文件,而不是单个连续的长文件流

指令作用

p

输出指定的行
d删除指定的行
y字符替换,格式:”行范围 y/旧字符串/新字符串/g”
s字串替换,格式:”行范围 s/旧字符串/新字符串/g”
r读取指定文件
w保存为文件
i插入,在当前行前插入一行或多行
a加入,在当前行下面增加一行指定内容
d删除,删除指定的行的内容
c替换,将选定行替换为指定内容

例:

输出指定的行

[root@ljp test]# sed -n '4p' /test/test.txt2   #输出第四行内容
111
[root@ljp test]# sed -n '1,4p' /test/test.txt2 #输出1到4行
aaa
bbb
ccc
111
[root@ljp test]# sed -n '1p;4p' /test/test.txt2 #输出1行和4行
aaa
ccc
[root@ljp test]# sed -n 'n;p' /test/test.txt2  #输出奇数行
[root@ljp test]# sed -n 'p;n' /test/test.txt2  #输出偶数行
[root@ljp test]# sed -n '1,${n;p}' /test/test.txt2 #将第一行到最末尾的所有偶数行输出
[root@ljp test]# sed -n '1,+4p' test.txt2      #输出第一行开始的连续4行
[root@ljp test]# sed -n '/999/p' test.txt2     #将包含“999”的行进行输出,注意格式!
999
[root@ljp test]# sed -n '/999\|111/p' test.txt2 #输出包含“999”以及“111”的行
[root@ljp test]# sed -n '1,/999/p' test.txt2   #将从第一行到包含”999“的行进行输出

插入符合条件的行

[root@ljp test]# sed -i '/999/i whoami' test.txt2 #在匹配”999“的行之前插入whoami
[root@ljp test]# sed -i '/999/a whoami' test.txt2 #在匹配“999”的行之后插入whoami
[root@ljp test]# sed '3alk' test.txt2             #在第三行之后插入"lk"
*:如果要插入多行数据,除了最后一行外,每行末尾都要加”/n“来进行换行表示数据未结束

删除符合条件的行

[root@ljp test]# sed '1d' test.txt2  #删除第一行并输出
[root@ljp test]# sed '$d' test.txt2  #删除最后一行输出
[root@ljp test]# sed '^$d' test.txt2  #删除所有空行并输出
[root@ljp test]# sed '1,2d' test.txt2 #删除1到2行并输出
[root@ljp test]# sed '/999/d' test.txt2 #删除包含”999“的行并输出
[root@ljp test]# sed '/999/!d' test.txt2 #取反删除包含”999“的行并输出(不包含”999“的行)
[root@ljp test]# sed '/^999/d' test.txt2 #删除”999“开头的行并输出
[root@ljp test]# sed '/999$/d' test.txt2 #删除”999“结尾的行并输出

替换符合条件的文本

[root@ljp test]# sed 's/000//g' test.txt2 #将”000“删除
[root@ljp test]# sed '/kkk/c lll' test.txt2 #将”kkk“替换为”lll“
[root@ljp test]# sed 's/999/000/2p' test.txt2 #将所有包含”999“的第二个”999“替换为”lll“
[root@ljp test]# sed '1,localhost/{s/localhost/192.168.11.11/}' test.txt2
#将匹配到localhost的第一行替换成192.168.11.11

迁移符合条件的文本

[root@ljp test]# sed '/777/w test2' test.txt  #将包含“777”的行内容保存到test2

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值