linux学习:sed脚本

目录

.例子

例子1  替换

例子2  指定某些行替换

例子3 直接通过 sed 修改原文,加选项 -i:

例子4 替换每一行中的所有的小写 s 成大写 S:

例子5   多个匹配

例子6  将&代替被匹配的变量:

例子7 提前预读多一行缓冲来进行匹配

例子8 在指定行的前面插入(i)或者后面插入(a)一些信息

例子9 将指定的行替换成其他信息

例子10 将指定的行删除掉

例子11 打印指定匹配的行

例子12 使用相对位置

例子13 执行多个命令


流编辑器, 自然要涉及文件,实际上,sed 的工作就是把文件或字符串里面的文字经过一系列编辑命令 转换为另一种格式输出,文档就像河流的源头,sed 就像卡在河流中间的过滤器,所有的文 本经过 sed 过滤之后形成另一个样子。sed 就是这样的一种东西

.例子

下面是文件内容

例子1  替换

 sed "s/-year/years/" people.txt

将"-year"改成" years" 

从 people.txt 中读取一行,然后使用正则表达式-year 来试图匹配某 单词,如果匹配成功,则将之替换成 years。

例子2  指定某些行替换

sed "2s/-year/years/" people.txt

将第 2 行的"-year"改成" years"。

 sed "2,5s/-year/years/" people.txt

sed "2,5s/-year/years/" people.txt

例子3 直接通过 sed 修改原文,加选项 -i:

 sed -i "2s/-year/years/" people.txt

 sed 缺省状态下不会修改原文,默认状态下他只是对原文的复制品进行了加工

例子4 替换每一行中的所有的小写 s 成大写 S:

 sed "s/s/S/g" people.txt

g 的意思是一行中所有的匹配项,否则缺省只会匹配第一个 s。 

 sed "s/s/S/2g" people.txt

替换每一行中的第 2 个以后的小写 s 成大写 S:

例子5   多个匹配

将"-year"改成" years",并且将第 3 行以后的最后一个任意字符去掉:

 sed 's/-year/ years/; 3,$s/.$//' people.txt
等价于
 sed -e 's/-year/ years/' -e '3,$s/.$//' people.txt

 第二个动作中 3,$指的是从第 3 行到最后一行,紧跟着的 s 代表替换,然后/.$//表 示将行尾的一个任意字符,替换为空(即删除),因为最后两个正斜杠紧挨在一起,里面没 有任何字符,代表空。

例子6  将&代替被匹配的变量:

 sed "s/is/[&]/" people.txt

将文本中每一行出现的第一个 is 的左右两边加上[ ]

例子7 提前预读多一行缓冲来进行匹配

sed 'N;s/is/IS/' people.txt

由于替换只会针对第一个出现的单词 is,而通过 N 又多读了一行,因此这个命令的 结果是只会替换奇数行

例子8 在指定行的前面插入(i)或者后面插入(a)一些信息

sed '3i x' people.txt 意思是:在第 3 行的前面插入 
sed '2a x people.txt 意思是:在第 2 行的后面插入 
sed '1,4a x people.txt 意思是:分别在第 1 至 4 行后插入 x
sed '/US/a x people.txt 意思是:在匹配 US 的行后插入 x

例子9 将指定的行替换成其他信息

sed “2c ok” people.txt 意思是:将第 2 行替换成 ok

例子10 将指定的行删除掉

sed ‘2d’ people.txt 意思是:将第 2 行给删掉
sed ‘/US/d’ people.txt 意思是:将匹配/US/的所有行删掉
sed ‘/\<he\>/d’ people.txt 意思是:将匹配 he 的所有行给删掉,
注意:之所以要用< >将 he 给括起来,是因为不想匹配 she,当然,< >需要转义,写成\<\>

例子11 打印指定匹配的行

sed '/Chen/p' people.txt -n 意思是:打印匹配 Chen 的行
sed '/Chen/, /Lau/p' people.txt -n 意思是:打印匹配Chen 或者 Lau 的行
sed '3,/UK/p' people.txt -n 意思是:从第 3 行开始打印直到匹配 UK 为止
sed '/UK/,6p' people.txt -n 意思是:从匹配 UK 的行开始打印,直到第 6 行为

例子12 使用相对位置

sed '/US/, +2p' people.txt -n 意思是:打印匹配 US 的行,并打印其后的 2 行

例子13 执行多个命令

sed '{/he/{/18/p}}' people.txt -n 意思是:匹配所有/he/的行之后,再匹配/18/的行,然后打印出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值