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

[经验分享] RHEL6.3-Sed流编辑工具(Red Hat Enterprise Linux Server6.3)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-17 09:19:02 | 显示全部楼层 |阅读模式
Sed流编辑工具(大多数以行为操作单位来定位)
Sed默认不直接修改源文件而是通过管道或者文件读取内容将其复制到称之为模式空间的缓冲区,其指令在这个模式空间内完成并打印到屏幕上。
语法格式:
上面提到定位以行尾单位,那么行暂且定义它为地址,也就是操作对象
地址的范围有一下集中格式
n#指定唯一行号
1~2 #指定从1行开始,间隔为2也就是1,3,,5,以次类推
$#指定最后一行
/正则表达式/#匹配正则表达式的操作对象
\a正则表达式a#匹配\a和a之间的正则表达式
3,5#匹配3-5行
1,+10#匹配1和1后面的10行内容


Sed[选项][脚本指令][输入文件]
选项:-n#静默输出,不打印模式空间的内容,默认情况下是自动打印的
-e脚本#允许多个脚本指令被执行
-f#从文件中读取指令
-l#输出的行长度
-r#扩展正则表达式
-I#直接修改源文件
指令:a   (append)#追加
d (delete)#删除
s(substitution)#替换
c#更改
y#按字符替换
p#打印
q#退出
i#插入
l#打印(显示非打印字符)
L#打印(显示打印字符)
r#读入文件内容
wKioL1XB1E_B3dA_AAEHd_ZzfD4807.jpg
例:第一行后追加"This is a example"

[iyunv@pan-S ~]# sed "1a This is a example" /opt/fstab_Mrpan

例:第6行前追加"This is a example"#注意源文件发生改变了

[iyunv@pan-S ~]# sed -i "6i This is a example" /opt/fstab_Mrpan
wKiom1XB0lbzqctjAACbL0Tl_8s565.jpg

例:替换命令
[iyunv@pan-S ~]# sed "s/defaults/Mr.pan/g" /opt/fstab_Mrpan

[iyunv@pan-S ~]# sed -i "3s/fstab/fstab_Mr.pan/g" /opt/fstab_Mrpan
例:更改命令
[iyunv@pan-S ~]# sed "/pan/c exit" /etc/passwd | more
例:利用正则表达式
匹配包含fstab的行单位
[iyunv@pan-S ~]# sed -i "/fstab/a This is a example" /opt/fstab_Mrpan
[iyunv@pan-S ~]# sed -n "/^$/d" /opt/fstab_Mrpan
当需要执行多个指令时可以使用 e f 或者分隔符分号;还可以使用分行,但是最好使用-f 文件来执行,这样的话便于修改,不容易出错。
例:删除包含example的行,替换所有的0为1
(1)、[iyunv@pan-S ~]# sed -e "/example/d" -e "s/0/1/g" /opt/fstab_Mrpan
(2)、[iyunv@pan-S ~]# sed "/example/d;s/0/1/g" /opt/fstab_Mrpan
(3)、如下图所示:
wKioL1XB1E_xiHY0AAFSxUv8mVc037.jpg
(4)、编写一个文件
wKiom1XB0lezRbYgAAB8cMZOTTs253.jpg
例:文件内容如下
wKioL1XB1E-yWa6HAADVUpZT9Bk272.jpg
wKiom1XB0lfRLp7fAABIQfUU_-c306.jpg

wKiom1XB0lew6SsKAAFB_3U5DN0865.jpg

这里做个sed 格式的总结:
[匹配行]{
命令1
命令2
命令3
}
例:删除文件中的空格
第一步:创建空格环境
[iyunv@Mr ~]# cat /etc/group >> sed_d2_example
[iyunv@Mr ~]# sed G  /sed_d2_example i
第二步:编写文件 vim sed.sh 如下所示
wKioL1XB1FDDaJR7AAAoqsYtglQ959.jpg
第三步:[iyunv@Mr ~]# sed -f ./sed.sh ./sed_d2_example i#删除空格

例:匹配行上插入空行
[iyunv@Mr ~]# sed "/sshd/{x;p;x;}" /etc/group
例:匹配行下插入空行

[iyunv@Mr ~]# sed "/sshd/G" /etc/group
例;匹配行上下各插入空行
    [iyunv@Mr ~]# sed"/sshd/{x;p;x;G;}" /etc/group

例:将小写装换成大写
       (1)、单词转换为大写(sed)
       [iyunv@Mr ~]#sed "s/\bmysql\b/\U&\E/g" sed_d2_example
       (2)、全文转换为大写(sed)
       [iyunv@Mr ~]#sed "s/[a-z]/\U&\E/g" sed_d2_example
       (2.1)、全文转换为大写(tr)
       [iyunv@Mr ~]#cat sed_d2_example | tr [a-z] [A-Z]
例:先读取/etc/group 再读取/etc/passwd文件
       [iyunv@Mr ~]#vim r_sed.sh
       #先读取/etc/group 再读取/etc/passwd
       /.*/{
       $r /etc/passwd
        }
      
[iyunv@Mr ~]# sed -f r_sed.sh /etc/group
例:q指令
    显示/etc/passwd 前两行之后推出
    [iyunv@Mr ~]# sed'2q' /etc/passwd
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  [iyunv@Mr ~]#
Sed高级应用
    Next 多行操作
    [iyunv@Mr ~]# vim N_sed.sh  #n用来屏蔽自动输出 L不显示非打印字符\n(换行符)
    #n
    #多行操作Next

    /name/{
    N
    L

    }

   
解析:sed使用了N读取了下一行的内容,同时又指令使其显示模式空间的内容这时输出的是两行合并的内容,如下所示,同时#n屏蔽了自动输出的内容仅显示L列出的模式空间的内容
[iyunv@Mr ~]# sed-f N_sed.sh test.txt
name:shudaipiaolingage:10
name:Mrpan age:20
name:pan age:30
区别上例:
  #n
#多行操作NEXT使用l指令显示非打印字符,这个与L不显示非打印字符的区别
  /name{
    N

    l

}
   
[iyunv@Mr ~]# sed-f N_sed.sh_l test.txt
name:shudaipiaoling\nage:10$
name:Mrpan\nage:20$
name:pan\nage:30$
Print 多行打印 #注意观察两个p P的区别,
QQ截图20150817091834.png
解析:指令P的sed使用N读取下一行内容追加到行尾为name:shudaipiaoling\nage:10,而P的特点是输出多行模式空间中第一部分的内容,直到\n换行符为止,此时指令P打印出来的内容为name:shudaipiaoling,而后sed自动输出内容模式空间的内容且\n输出为换行,即打印第一行2次,第二行一次。
模式空间和保持空间的内容相互复制
保持空间是sed中的另外一个缓冲区,此缓冲区正如其名,不会自动清空,但也不会主动把此缓冲区中的内容打印到标准输出中。而是需要以下sed命令进行处理:(下面所说的复制按替换的意思理解)
     d     Delete pattern space.  Start next cycle.   删除pattern space的内容,开始下一个循环.
     h、 H    Copy/append patternspace to hold space.   复制/追加pattern space的内容到hold space.
     g、 G    Copy/append holdspace to pattern space.   复制/追加hold space的内容到pattern space.
     x      Exchange the contents of the hold and patternspaces.    交换hold space和pattern space的内容.
sed的工作流程。pattern space和hold space默认都是空的。sed读入一行内容,删除尾部的换行符,存入pattern space, 然后执行SCRIPT,如果OPTIONS里没有 -n, pattern space里的内容会被输出到stdout(若读入时含有换行,这里会输出换行), 如果有-n, 则不输出,接下来就读取下一行数据,重复上述步骤。
例:

[iyunv@Mr ~]# cattest.txt
name:shudaipiaolingage:10
name:Mrpan age:20
name:pan age:30
[iyunv@Mr ~]#
[iyunv@Mr ~]# sed'1!G;h;$!d' test.txt
name:pan age:30
name:Mrpan age:20
name:shudaipiaolingage:10
QQ截图20150817091847.png


运维网声明 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-100038-1-1.html 上篇帖子: RHEL6.3正则表达式(Red Hat Enterprise Linux Server6.3) 下篇帖子: RHEL6.5搭建NFS服务器案例分析与总结(Red Hat Enterprise Linux Server6.5) Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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