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

[经验分享] Linux文本工具sed

[复制链接]

尚未签到

发表于 2018-5-20 10:23:10 | 显示全部楼层 |阅读模式
Sed



    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。




sed用法:
    sed [OPTION]...  'script'  [input-file] ...   


    常用选项   
    -n:静默模式(禁止在匹配不到的情况下,直接屏幕输出,仅显示script处理后的结果)
    -e script:多点编辑(可同时运行多个脚本)
    -f script-file:读取脚本文件并运行(文件内每行都有匹配条件)
    -r:支持扩展正则表达式
    -i:直接编辑源文件


    script:

    地址定界编辑命令



    地址定界

        1.空地址:对全文进行处理

        2.单地址:

            #:指定的行(#表示数字)

            /pattern/:被此模式所匹配到的每一行(被正则表达式匹配)
        3.地址范围:

            #,#:第几行到第几行

            #,+#:相对地址表示法(如3,+6表示从第3行开始往下加6行)

            #,/pat1:从第#行,到被模式1匹配到之间的行

            /pat1,/pat2:从第一个模式开始到第二个模式结束的行

            $:最后一行

         4.步进:

            ~

            1~2:所有基数行(从第1行开始往下每隔1行)

            2~2:所有偶数行(从第2行开始往下每隔1行)


    编辑命令
        d:删除
  p:显示模式空间中的内容(如果不加-n,默认匹配到的行再显示一遍)
  a  \text:在行后面追加文本“text”,支持使用\n实现多行追加
  i  \text:在行前面插入文本“text”,支持使用\n实现多行插入
  c  \text:把匹配到的行替换为此处指定的文本“text”
  w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中
  r  /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并
  =:为模式匹配到的行打印行号
  !:条件取反
  s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等(s/查找内容/替换内容/替换标记)
  替换标记:
  g:全局替换;
  i:忽略大小写
  w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
  p:显示替换成功的行;




Sed命令的使用:

  •   删除/tmp/grub.cfg文件中所有行的行首的空白字符(删除其实就是让其替换为空)

首先看下/tmp/grub.cfg文件
[root@localhost ~]# cat /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"使用sed命令进行操作后
[root@localhost ~]# sed 's/^[[:space:]]\+//' /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"



2.删除/tmp/grub.cfg文件中所有以#开头的行,行首是#及后面所有的空白字符
首先看下/etc/grub.conf文件
[root@localhost ~]# cat /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#使用sed命令进行操作后
[root@localhost ~]# sed 's/^#[[:space:]]//' /tmp/grub.cfg
#
DO NOT EDIT THIS FILE
#
It is automatically generated by grub2-mkconfig using templates
from /etc/grub.d and settings from /etc/default/grub
#



3.取/etc/fstab文件中偶数行,另存为/tmp/newfstab
首先看下/etc/fstab文件
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri May 13 14:28:49 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b66544bf-32a4-4bef-82cb-0059f9e94b34 /                       xfs     defaults        0 0
UUID=321571a3-d498-4677-be37-fc18793f3ca1 /boot                   xfs     defaults        0 0
UUID=54e25c6d-d378-4c2f-9df4-62d25f6065f8 /usr                    xfs     defaults        0 0
UUID=9b2e4d08-b266-47fc-b8d1-3f81b76094fe swap                    swap    defaults        0 0使用sed命令进行操作后
[root@localhost ~]# sed '2~2w /tmp/newfstab' /etc/fstab
再来查看另存为的/tmp/newfstab
[root@localhost ~]# cat /tmp/newfstab
#
# Created by anaconda on Fri May 13 14:28:49 2016
# Accessible filesystems, by reference, are maintained under '/dev/disk'
#
UUID=321571a3-d498-4677-be37-fc18793f3ca1 /boot                   xfs     defaults        0 0
UUID=9b2e4d08-b266-47fc-b8d1-3f81b76094fe swap                    swap    defaults        0 0



4.echo一个绝对路径给sed,取其基名
使用sed命令操作后(如果用s///,以/的所有路径需要\转译,避免麻烦,直接使用s@@@)
[root@localhost vars]# echo /etc/yum/vars/ | sed 's@[^/]\+/\?@@'
/yum/vars/  

运维网声明 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-462804-1-1.html 上篇帖子: kill cmd and linux 下篇帖子: mysql linux安装yum
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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