sed命令简介

文本处理三剑客:
    grep:egeep,fgrep:文本过滤器
    sed:stream Editor:流编辑器,逐行
    awk:文本格式化工具,报告生成器

一、sed简介

sed一次从文件中读取一行,不会修改原文件的内容
    sed命令将当前处理的行读入模式空间(pattern space)进行处理,sed在该行上执行完所有命令后就将处理好的行打印到屏幕上(除非之前的命令删除了该行)
    sed处理完一行就将其从模式空间中删除,然后将下一行读入模式空间,进行处理、显示。
    处理完文件的最后一行,sed便结束运行。sed在临时缓冲区(模式空间)对文件进行处理,所以不会修改原文件,除非显示指明-i选项。
    
        放在sed的工作空间:pattern space 处理-->模式匹配-->匹配(则编辑->根据编辑命令是否输出) //不匹配(stout)
        输出到-->stout
        
    可以基于正则表达式进行文本过滤
        把文件的
    文件行数据流:--->|pattern space|  //默认显示没有匹配到的行
                            v
                          /      \
                        No        Yes
                        |        /  \
                        |     /    edit
                        |   /        |
                        V/            Hold space
                        stdout        
        
        //sed空间:空间可以转换
            pattern space
            hold space //处理的结果
    sed [option] ... ‘script‘ [input-file]...  //输入文件可以有多个
        script:地址定界+编辑命令
        OPtions:
            -n ,--quiet,--slient不输出模式空间的内容到屏幕
                suppress:压制,不让
            -e script, --expression=script //默认只有一个script,实现多点编辑
            -f script-file //脚本文件,每行一个编辑命令
            -r 支持扩展的正则表达式
            -i 直接编辑原文件
        地址定界:
            1.空地址,表示对全文进行处理
            2.单地址,
                # :指定行
                /pattern/ :被此模式匹配到的每一行
            3.地址范围
                #,# //起始地址
                #,+# //向后几行
                #,/pattern/  //到pattern模式匹配结束
                /pat1/,/pat2/   //斜线是默认的,必须有
            4.步进:~
                1~2 //所有的奇数行
                2~2 //所有的偶数行
        编辑命令:
            d 删除模式空间的内容
                sed ‘/^UUID/d‘ /etc/fstab //删除uuid开头的行
                sed ‘3d‘ /etc/fstab //删除第3行
                sed ‘1~2d‘ /etc/fstab  //显示偶数行,删除奇数行
            p 打印模式空间的内容
                sed ‘1~2p‘ /etc/fstab //模式空间显示两遍,
                        //偶数行没有被匹配,因此显示
                        //奇数行被匹配到,默认为显示
                        //edit后的操作是显示
                sed ‘1~2p‘ /etc/fstab -n //只显示奇数行,模式空间的内容
            a\test 追加 :在模式匹配到的行,下一行追加文本,支持使用,\n实现多行追加
                后面追加
            i\test:在行前面插入文本,支持使用\n实现多行插入
                sed ‘3i \new line‘ fstab.t //不匹配到的行,默认也为输出
                sed ‘3a \new line\nanother line‘ fstab.t //插入两行
                sed ‘/UUID/a \# add new device base on UUID‘ fstab.t //在每一行的UUID前面都加了信息
            c\text:把匹配到的行替换为此处指定的文本"text";
            
            主要: "/" 和 "\" 都可以使用
            
            w /PATH/TO/SOMEWHERE :保存模式空间匹配到的行至指定的文件中
                sed -n ‘/^[^#]/w /tmp/fsatb.test‘ fstab //把非#开头的行,保存到文件
            r /PATH/TO/SOMEFILE :读取指定文件的内容到当前文件被模式匹配到的行中
                sed ‘3r /etc/issue‘ fstab //在3行,读入issue的内容
                sed ‘/dev/r /etc/issue‘ fstab //匹配到的行,都读入issue文件内容
            = 为模式空间匹配到的行,打印行号
                sed ‘/dev/=‘ fstab
            ! 条件取反
                sed ‘/^#/!d‘ /etc/fstab //模式取反
            s/// :查找替换,其分隔符可自行指定,常用的分隔符,s##,[email protected]@,s///等
                替换标记:
                    g:全局替换
                    w /PATH/TO/SOMEFILE:保存到指定文件
                    p:显示替换成功的行
                    
二、练习
    1.删除/boot/grub/grub2.cfg文件中所有以空白开头的行的行首的所有空白字符
    2.删除/etc/fstab文件中所有以#开头的行的行首的#号以及#号后面的空白字符
    3.输出一个绝对路径,取出其目录,其行为类似于dirname
        1.sed ‘[email protected]^[[:space:]]\[email protected]@‘ /etc/grub2.cfg
        2.sed ‘[email protected]^#[[:space:]]*@@‘ /etc/fstab
            sed ‘[email protected]^#[[:space:]]*@@‘ -e ‘/^UUID/d‘ /etc/fstab
        3.echo "/var/log/messages" | sed ‘[email protected][^/]\[email protected]@‘
          echo "/var/log/messages/" | sed ‘[email protected][^/]\+/\[email protected]@‘  //基本的正则表达式,\?需要转义:可有可无
          echo "/var/log/messages/" | sed -r ‘[email protected][^/]+/[email protected]@‘    //扩展的正则表达式
        
三、高级编辑命令
        h H    Copy/append pattern space to hold space. p->h
        g G    Copy/append hold space to pattern space. h->p
            g:get
            大写的为追加,小写的为复制
        x:把两组空间互换,exchange
        n N    Read/append  the  next line of input into the pattern space.
        d 删除模式空间中的行
        D:删除多行模式空间中的行
        
    示例:
        sed -n ‘n;p‘ /etc/fstab //显示偶数行,n为下一行,分号用于分割命令
        sed ‘1!G‘ /etc/fstab //除了第一行,都追加一行空白
        sed ‘1!G;h;$!d‘ /etc/fstab
                //覆盖模式空间到hold空间,最后一行不删除,其他都删除{删除模式空间的第几行}
                //逆序显示文件内容
        sed ‘$!d‘ /etc/fstab  //不是最后一行就删除
        sed ‘$!N;$!D’ file  //只显示最后两行
            $!N //不是最后一行,追加下一行到模式空间
                倒数第二行,追加最后一行后结束
            $!D //不是最后一行,都删除,
                倒数第二行的时候,追加的是最后一行,所以不删除
        sed ‘/^$/d;G‘ /etc/fstab //删除原有的所有空白行,而后为所有的非空白行,后添加一个空白行
        sed ‘n;d‘ file //显示奇数行
        sed ‘G‘ file //在每行后都追加一个空白行
    sed -i ‘/^UUID/d‘ fstab //在原有的文件上修改    
    
注意:任何时候,删除和修改的时候,先备份

时间: 2024-10-13 21:33:48

sed命令简介的相关文章

sed命令简介及在sed命令中使用变量的方法

1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed 3.02.2. 定址可以通过定址来定位你所希望编辑的行,该地址用数字构成,用

sed 命令使用 (笔记)

linux 三大文本处理工具 grep sed awk 之前有说过grep 今天来看看sed命令 简介 sed (Stream EDitor)流编辑器,是非交互式的编辑器,它一次处理一行内容.而且此编辑器默认不会对原文件做修改,如果想要修改使用shell重定向保存结果.默认情况下,所有的输出行都会被打印在屏幕上. sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕上.处理过程如下: 首先sed 把当前正在处理的行保存在一个临时的缓冲区中(也称为模式空间pattern space),然后处理

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

linux sed命令详解(转)

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed使用参数 [[email protected] ~]# sed [-nefr] [动作] 选项与参数: -n

【Linux学习011】sed命令详解

一.简介 sed(Stream EDitor)是一种行编辑器,Linux中有三种常见的行编辑器:gred,sed,awk,其中awk命令最复杂,grep命令最简单,sed命令难度适中. sed命令能够接收一个文件或者管道输入流,以一次处理一行的方式处理完成整个文档,能够接收管道输入流是sed命令的一个特色功能. sed命令的详细使用方法在线手册:http://www.gnu.org/software/sed/manual/sed.html sed最全命令格式展开 sed OPTIONS... [

理解linux sed命令

理解linux sed命令(2010-02-27 18:21:20) 标签:linuxshellsed替换 分类:革命本钱 1. Sed简介sed是一种在线编辑器,它一次处理一行内容.处理时,把当 前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反

sed命令详解

1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下: 首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示.处理完输入文件的最后一行后,sed便结束运行.sed把每一行都存在临时缓冲区中,对这个副本进行编辑

2.2 linux sed命令详解

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed使用参数 [[email protected] ~]# sed [-nefr] [动作] 选项与参数