zoukankan      html  css  js  c++  java
  • Linux sed命令详解

            sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。

    处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

    接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

    定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

    sed命令功能

     命令	 功能
     a	 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“”续行
    
     c	 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行
    
     i	 在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行
    
     d	 删除行
    
     h	 把模式空间里的内容复制到暂存缓冲区
    
     H	 把模式空间里的内容追加到暂存缓冲区
    
     g	 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
    
     G	 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
    
     l	 列出非打印字符
    
     p	 打印行
    
     n	 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
    
     q	 结束或退出sed
    
     r	 从文件中读取输入行
    
     !	 对所选行以外的所有行应用命令
    
     s	 用一个字符串替换另一个
    
     g	 在行内进行全局替换
    
     w	 将所选的行写入文件
    
     x	 交换暂存缓冲区与模式空间的内容
    
     y	 将字符替换为另一字符(不能对正则表达式使用y命令)
    

    sed常见命令参数

     p==print 
     d:delete
     =:打印匹配行的行号
     -n 取消默认的完整输出,只要需要的  
     -e 允许多项编辑
     -i 修改文件内容
     -r 不需要转义
    注意:& 符号在sed命令中代表上次匹配的结果 

    常用的命令展示

    sed擅长行输出,附源文件:

    hhh     pts/1        192.168.25.1     Sat Jun 30 22:04   still logged in   
    reboot   system boot  2.6.32-358.el6.i Sat Jun 30 22:04 - 22:43  (00:38)    
    omc     pts/0        192.168.25.1     Sat Jun 30 20:16 - down   (00:00)    
    reboot   system boot  2.6.32-358.el6.i Sat Jun 30 19:38 - 20:16  (00:37)    
    root     pts/1        192.168.25.1     Sat Jun 30 12:20 - down   (00:55)    
    root     pts/0        192.168.25.1     Sat Jun 30 11:53 - down   (01:22)    
    reboot   system boot  2.6.32-358.el6.i Sat Jun 30 11:52 - 13:15  (01:23)    
    root     pts/0        192.168.25.1     Sat Jun 30 05:40 - down   (02:51)    
    reboot   system boot  2.6.32-358.el6.i Sat Jun 30 05:38 - 08:32  (02:54)    
    root     pts/0        192.168.25.1     Fri Jun 29 21:01 - down   (06:21)    
    
    wtmp begins Tue Jun  9 03:57:56 2015

    只打印第三行

    sed -n '3p' /var/log/yum.log

    image

    只查看文件的第3行到第9行

    sed -n '3,9p' /var/log/yum.log

    image

    过滤特定字符串,显示正行内容  

    sed -n  '/root/p' yum.log

    image

    显示包含"hhh"的行到包含"omc"的行之间的行

    sed -n '/hhh/,/omc/p' yum.log 

    image

    打印1-5行,并显示行号

    sed -n -e '1,5p' -e '='  yum.log

    image

    仅仅显示匹配字符串的行号

     sed -n '/root/p' yum.log 

    image 

    打印匹配行的内容和符号【相当于后面又根据关键词查询了一次】

    sed -n -e '/root/p' -e '/root/=' yum.log

    image

    用world 替换yum.log文件中的root【真实写入】

    sed -i 's/root/world/g' yum.log
    ==>sed -i 's#hhh#HHHH#g' h.txt     与上同
                  s==search  查找并替换
                  g==global  全部替换
                  -i: implace
    

    image

    打印最后一行

    sed -n '$p' yum.log

    image

    在文件第一行添加happy,文件结尾添加new year

    sed -e '1i happy' -e '$a new year' yum.log       【界面显示】
    sed -i -e '1i happy' -e '$a new year' yum.log    【真实写入文件】
    

    image

    在文件第一行和第四行的每行下面添加hahaha

    sed '1,4i hahaha' yum.log       

    image

    & 符号在sed命令中代表上次匹配的结果

    sed 's/world/hello_&/g' yum.log   

    image

    删除第3到第9行,只是不显示而已

    sed  '3,9d' /var/log/yum.log

    image

    删除包含"hhh"的行到包含"omc"的行之间的行

    sed '/hhh/,/omc/d' yum.log

    image

    删除包含"omc"的行到第十行的内容

    sed '/omc/,10d' yum.log

    image
    备注:范围可以用数字、正则表达式、或二者的组合表示

    显示中5到10行里匹配root,把行内所有的root替换为FTL,并打印到屏幕上

     sed '5,10 s/root/FTL/g' yum.log【仅显示用】
     sed -i sed '5,10 s/root/FTL/g' yum.log【-i 会真正替换信息】
    

    image

    -e是编辑命令,用于多个编辑任务

    删除1到5行后,替换reboot为shutdown
    sed -e '1,5d' -e '=' -e 's/reboot/shutdown/g'  yum.log  
    

    image

    打印3到6行的内容,并匹配reboot替换为shutdown

    sed -n -e '3,6p' -e 's/reboot/shutdown/g'  yum.log  

    image

    -r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上

    [root@localhost log]# cat test.txt 
    [root@localhost log]# sed '/root/ r /var/log/test.txt' yum.log  【yum.log  匹配root后读入text.txt的内容在匹配内容之下,仅显示用】

    image

    -w是写入命令

    sed  '/root/ w /home/omc/root.txt' yum.log       【yum.log匹配root后写入root.txt',真实写入】
    sed -n '/root/ w /home/omc/root.txt' yum.log    【添加-n参数后,不打印源文件】
    ll /home/omc/root.txt

    image

    打印1-5行,并显示行号

    sed -n -e '1,5p' -e '='  yum.log 

    image

    sed的正则匹配

    正则匹配IP和子网掩码

    [root@localhost log]#  ifconfig |sed -n '2p'
          [root@localhost log]# ifconfig |sed -n '2p' | sed -r 's#.*r:(.*) B.*k:(.*)#1 2#g' 
    
          (.*)表示匹配的项,之后可以用1取出第一个括号内匹配的内容,2取出第二个括号内匹配的内容  
    

    image

    配合find命令的使用

    find . -name  "*.txt" |xargs   sed -i 's/hhhh/hHHh/g' 
    find . -name  "*.txt" |xargs   sed -i 's#hhhh#hHHh#g' 
    find . -name  "*.txt" -exec sed -i 's/hhhh/hHHh/g' {} ;
    find . -name  "*.txt" |xargs cat

    sed错误使用

    sed 's#,# #h' h.txt | cut -d" " -f 3,5 h.txt    <-- 错误的用法,前面已经处理了,后面又用cut查看h.txt文件
    sed 's#,# #h' h.txt | cut -d" " -f 3,5          --> 正确的用法
  • 相关阅读:
    Constants and Variables
    随想
    C#基础篇之语言和框架介绍
    Python基础19 实例方法 类方法 静态方法 私有变量 私有方法 属性
    Python基础18 实例变量 类变量 构造方法
    Python基础17 嵌套函数 函数类型和Lambda表达式 三大基础函数 filter() map() reduce()
    Python基础16 函数返回值 作用区域 生成器
    Python基础11 List插入,删除,替换和其他常用方法 insert() remove() pop() reverse() copy() clear() index() count()
    Python基础15 函数的定义 使用关键字参数调用 参数默认值 可变参数
    Python基础14 字典的创建修改访问和遍历 popitem() keys() values() items()
  • 原文地址:https://www.cnblogs.com/ftl1012/p/sed.html
Copyright © 2011-2022 走看看