文本工具三剑客:sed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本工具三剑客:sed相关的知识,希望对你有一定的参考价值。

文本工具三剑客:sed
sde是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区,称为 模式空间
    用法:
    sed [选项] [加自己的语言] [要处理的文件]
    选项:
        -n  不输出模式中的内容至屏幕
            # sed -n "10p" f2 只打印出第10行匹配到的行 其他不显示
            10  UUID=07a475f4-3d7a-4b27-9ec9-500bc8a19c4d /boot
        -e  多点编辑
        -f  指定文件中读取编辑脚本
        -r  支持使用扩展正则表达式
        -i  原处编辑
        
    Script:
        地址命令
        
    地址定界:
        (1)不给地址:对全文进行处理
        (2)单地址:
            # 指定的行
            /模式/ 被此处模式所能够匹配到的每一行
        (3)地址范围
            #,#
            #,+#
            /pat1/,/pat2/
            #,/pat1/
        (4)~: 步进
            1~2 奇数行
            2~2 偶数行
            
    sed 编辑命令
        d 删除模式空间匹配的行
            sed "10d" f2 删除f2的第10行 不是直接删除文件的第10行
        p 显示模式空间中的内容
            sed "10p" f2 显示f2的第10行 第10行会多显示一行
            sed  -n "10p" f2 只显示第10行 打印一遍
            
        a \text 在行后面追加文本;支持使用\n实现多行追加
            sed "10a\===" f2  到第10行中的结尾打印===
            sed "a\===" f2  在所有行的结尾打印===
            
        i \text 在行前面插入文本;支持使用\n实现多行插入
            sed "/UUID/i\===" f2 在UUID前面显示=====
       
        c \text 提换行为单行或多行文本
            sed "/UUID/c\++++++++" f2 把UUID匹配到的行都替换到+++++++
       
        w /path/to/somefile 保存模式匹配的行至指定文件
            sed "/UUID/w f3" f2   把UUID匹配到的行保存到f3 中
            
       
        r /path/from/somefile 读取指定文件的文本至模式空间中匹配到的行后
            sed  "/UUID/r/etc/issue" f2 在UUID的后面打印/etc/issue 中的内容
       
        = 为模式空间中的行打印行号
            sed  "/UUID/=" f2 在UUID 的前面显示所在的行
       
        ! 模式空间中匹配行取反处理
            sed "/UUID/!=" f2  除了UUID 的行不打印 其他的都打印一遍
       
        s/// 查找替换,支持使用其它分隔符,[email protected]@@,s###
            sed "/UUID/s/xfs/chen/" f2 在f2文件中 搜索UUID的行 把xfs替换成chen
    
        替换标记
            g 行内全局替换
            p 显示替换成功的行
            w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
        
        示列:
            sed‘2p’ /etc/passwd  显示/etc/passwd 的第2行 其他的也显示
            
            sed–n ‘2p’ /etc/passwd  只显示/etc/passwd 的第2行 其他不显示
            
            sed–n ‘1,4p’ /etc/passwd    显示/etc/passwd 的1~4行
            
            sed–n ‘/root/p’ /etc/passwd 搜索 root的行其他不显示
            
            sed–n ‘2,/root/p’ /etc/passwd   从第2行 开始搜 root 的行
            
            sed-n ‘/^$/=’ file  显示空行行号
            
            sed–n –e ‘/^$/p’ –e ‘/^$/=’ file
            
            sed‘/root/a\superman’ /etc/passwd行后  
                
            sed‘/root/i\superman’ /etc/passwd行前
            
            sed‘/root/c\superman’ /etc/passwd代替行
            
            sed‘/^$/d’ file
          
            sed‘1,10d’ file
          
            nl/etc/passwd| sed‘2,5d’
          
            nl/etc/passwd| sed‘2a tea’
          
            sed‘s/test/mytest/g‘ example
          
            sed–n‘s/root/&superman/p’ /etc/passwd单词后
          
            sed–n‘s/root/superman&/p’ /etc/passwd单词前
         
            sed-e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets
          
            sed–i.bak ‘s/dog/cat/g’ pets
            
            练习
            1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符
                sed ‘s/^[[:space:]]\+//‘ /etc/grub2.cfg

          
            2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
1.              sed  "s/^#[[:space:]]\+//" /etc/fstab
          
            3、在/root/install.log每一行行首增加#号
                sed  ‘s/.*/#&/‘ /etc/passwd
                sed ‘s/^/#/‘ /etc/passwd
          
            4、在/etc/fstab文件中不以#开头的行的行首增加#号
                sed ‘/^#/!s/.*/#&/‘ f2
          
            5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
                echo "/etc/fstab" | sed -r ‘[email protected]^(/?.*)/[^/]+/[email protected]\[email protected]
                echo "/etc/fstab" | sed -r ‘[email protected]^/?.*/([^/]+/?)@\[email protected]
            6、利用sed 取出ifconfig命令中本机的IPv4地址
                ifconfig | sed -n "2p" | tr -s ‘ ‘ ‘#‘ | cut -d# -f3
          
            
        sed:高级编辑命令
            h: 把模式空间中的内容覆盖至保持空间中
            H:把模式空间中的内容追加至保持空间中
            g: 从保持空间取出数据覆盖至模式空间
            G:从保持空间取出内容追加至模式空间
            x: 把模式空间中的内容与保持空间中的内容进行互换
            n: 读取匹配到的行的下一行覆盖至模式空间
            N:追加匹配到的行的下一行至模式空间
            d: 删除模式空间中的行
            D:删除多行模式空间中的所有行
            
            示列:
                sed -n ‘n;p‘ FILE
                sed ‘1!G;h;$!d‘ FILE
                sed ‘$!N;$!D‘ FILE
                sed ‘$!d‘ FILE
                sed ‘G’ FILE
                sed ‘g’ FILE
                sed ‘/^$/d;G’ FILE
                sed ‘n;d‘ FILE
                sed -n ‘1!G;h;$p‘ FILE
           

本文出自 “linux” 博客,请务必保留此出处http://001230.blog.51cto.com/11559496/1886601

以上是关于文本工具三剑客:sed的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式三剑客之二sed工具

Shell文本处理工具(Linux三剑客 grep sed awk )

Linux文本处理工具之grep sed简概

Linux文本处理三剑客grepsedawk用法详解

Pyp–一个替代sed,awk的文本处理工具

Shell编程三剑客之sed