设为首页 收藏本站
查看: 2114|回复: 0

shell编程命令之sed

[复制链接]

尚未签到

发表于 2015-12-15 15:17:01 | 显示全部楼层 |阅读模式
sed是一个非交互式文本编辑器,sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,
然后读取命名行或脚本的第一个命令,对此名要求的行号进行编辑,重复此过程直到结束。
sed命令格式为:
sed [选项]    'sed命令'    输入文件
sed命令由定位文本和sed编辑命令两部分组成。
sed提供两种方式定位文本:
1,使用行号。                 
2,使用正则表达式。
sed编辑命令:
p           打印匹配行
=           打印文件行号
a\          在定位行号后追加文本信息
i\          在定位行号之前插入文本信息
d           删除定位行
c\          用新文本替换定位文本
s           使用替换模式替换相应模式
r           从另一个文本中读取文件
w           将文本写入另一个文件中
y           变换字符
q           第一个模式匹配后退出
l           显示与八进制ASCII等价的控制符
{}          在定位执行的命令组
n           读取下一行,用下一的命令处理新的行
h           将模式缓冲区的文本复制到保持缓冲区
H           将模式缓冲区的文本追加到保持缓冲区
x           互换模式缓冲区和保持缓冲区的内容
g           将保持缓冲区的内容复制到模式缓冲区
G           将保持缓冲区的内容追加到模式缓冲区


sed编程命令选项的例子:
-n        取消sed的默认打印全部输出
[iyunv@localhost lianxi]# sed -n '1p' output
root:x:0:0:root:/root:/bin/bash
[iyunv@localhost lianxi]# sed  '1p' output
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-e          向sed传递多个编辑命令
[iyunv@localhost lianxi]# sed -n -e '/root/p' -e '/root/=' output
root:x:0:0:root:/root:/bin/bash
1
operator:x:11:0:operator:/root:/sbin/nologin
2
注意sed不支持同时带多个编辑命令的用法,如:
[iyunv@localhost lianxi]# sed -n -e '/root/p=' output
sed:-e 表达式 #1,字符 8:extra characters after command
-f          只有调动sed脚本时才启用,如追加,插入,修改,删除,替换文本时才调用。
脚本:
#!/bin/sed -f
/root/a\"this is  new line"
调用:
[iyunv@localhost lianxi]# ./sed.sh output
root:x:0:0:root:/root:/bin/bash
"this is  new line"


sed文本定位的一组例子:
1.匹配元字符:使用"\"即可
2.$在sed名中表示最后一行
[iyunv@localhost lianxi]# sed -n '$p' output
operator:x:11:0:operator:/root:/sbin/nologin
tail命令也可以
[iyunv@localhost lianxi]# tail -1 output
operator:x:11:0:operator:/root:/sbin/nologin
3.!表示取反
[iyunv@localhost lianxi]# sed -n '1!p' output
operator:x:11:0:operator:/root:/sbin/nologin
4.使用行号与关键字匹配限定行范围
/pattern/,x 或 x,/pattern/


sed编辑命令的一组例子:
1.修改文本      c
sed         '指定位置 i\"text“ 输入文件
2.插入文本      i
sed         '指定位置 i\"text“ 输入文件
3.删除文本      d
指定位置  d
4.替换文本      s
s/被替换的/新的/[替换选项]
g:替换所有的(默认只替换第一个)
5.写入新文件
指定位置 w  文件名
6.读入新文件
指定位置 r  文件名
7.退出命令      q
8.变换命令      y
'y/原字符序列/新字符序列/'        输入文件
10.在定位执行组命令和-e选项的作用类似。
[iyunv@localhost lianxi]# sed -n '/root/{p;=}' output
root:x:0:0:root:/root:/bin/bash
1
operator:x:11:0:operator:/root:/sbin/nologin
2


sed高级编辑命令的一组例子:
1.处理匹配行的下一行
[iyunv@localhost lianxi]# sed  '/^root/{n;s/operator/xixi/g;}'  output
root:x:0:0:root:/root:/bin/bash
xixi:x:11:0:xixi:/root:/sbin/nologin
2.sed缓冲区的处理,sed有两种缓冲区,模式缓冲区(pattern buffer)和保持缓冲区(hold buffer)前面提及的是模式缓冲区。sed的一些命令可以对保持缓冲区的内容处理在和模式缓冲区进行兑换。有h,x,G这几个选项。


3.利用分号分隔多编辑命令,等价于用-e选项引出多个编辑命令。
[iyunv@localhost lianxi]# sed 's/xixi/haha/;s/bash/ksh/' output
root:x:0:0:root:/root:/bin/ksh
operator:x:11:0:operator:/root:/sbin/nologin

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151656-1-1.html 上篇帖子: Makefile中的常用函数 - foreach、if、call、shell、value、eval 下篇帖子: shell笔记_04
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表