Linux sed 命令使用小结

本章将对文本处理三剑客其中之sed命令做一个学习小结:

文本处理三剑客:
    Grep egrep fgrep
    Sed:stream Editor,流编辑器 行
    awk:文本格式化工具,报告生成器

Sed官方解释如下:
 sed - stream editor for filtering and transforming text

Sed工作流程:

这里写图片描述

    Sed 将原文本内容逐行读入到自己的工作车间,叫做pattern space(模式空间),在pattern space中按照条件进行处理,比如正则表达式,
        1.如果行数据内容没有被匹配到,进入图中"NO" 之后stdout标准输出
        2.如果行数据内容匹配到,进入图中“Yes” 之后进入stdout标准输出或者根据edit规则输出数据
        3.Hold space与pattern space数据可以进行互换,这部分也是sed高级特性.

下面用命令和实例对sed原理加以讲解,相信大家跟下面的经典实例做些测试,会对sed命令有了更直观的理解:

Sed常用选项:
    -n:不输出模式空间中的内容至屏幕;
    -e    script, --expression=script:多点编辑;
        实例: ~]# sed  -e  's@^#[[:space:]]*@@'   -e     '/^UUID/d'  /etc/fstab ,两个命令即为多点编辑,
    -f    /PATH/TO/SED_SCRIPT_FILE 
        注明:-f参数引用一个文件,将多个命令同时引用,文件命令格式为:每行一个编辑命令即可;
    -r,   --regexp-extended:支持使用扩展正则表达式;
    -I    [SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;所以接下来的案例都是源文件显示内容,如果有-i参数,显示的内容会保存到源文件中,此参数慎用!


地址定界:
            (1) 空地址:对全文进行处理;
            (2) 单地址:
                #:指定行;
                /pattern/:被此模式所匹配到的每一行;
            (3) 地址范围
                #,#:
                #,+#:
                #,/pat1/
                /pat1/,/pat2/
                $:最后一行;
            (4) 步进:~
                1~2:所有奇数行
                2~2:所有偶数行
        实例:
            显示所有的奇数行:
            sed -n '1~2p' /etc/passwd


编辑命令
    d 删除
    P 显示模式空间中的内容
    a  \text  在行后面追加文本“text” 支持使用\n实现多行追加
    I  \text:在行前面插入txt 支持使用\n实现多行追加
    实例:
        [root@222 ~]# sed '3a \newline\nsecond new line' /etc/fstab    
    c \text 匹配到的行替换为此处指定文本“text” 注意是整行替换
    W /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定文件中
    r /PATH/FROM/SOMEFILE:读取指定文件内容至当前文件匹配到的行处
    = 为模式匹配到的行打印行号
    !取反条件

s///:查找替换
        替换标记:
            g:全局替换
            w:/PATH/TO/SOMEFILE
            p:显示替换成功的行

    练习1:删除/boot/grub.conf 文件中所有以空白字符开头的行的行首的所有空白字符;
    ~]# sed  's@^[[:space:]]\+@@' /etc/grub.conf
    练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
    ~]# sed  's@^#[[:space:]]*@@'  /etc/fstab
    练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;
    ~]# echo "/var/lib/games/" | sed 's@[^/]\+/\?$@@'



Hold space与pattern space数据互换:
 高级编辑命令:
    h:把模式空间内容覆盖至保持空间
    H:把模式空间内容追加至保持空间中
    g: 把保持空间中的内容覆盖至模式空间中
    G:把保持空间中的内容追加至模式空间中
    x:把模式空间中与保持空间中内容互换
    n;读取匹配都得行的下一行至模式空间中
    N:追加读取匹配到的行的下一行至模式空间中
    d:删除模式空间中的行
    D:删除多行模式空间中的所有行

        sed '/^$/d;G' FILE:
            (1)/^$/d 是在pattern space中删除源文件所有空白行
            (2)G:把Hold 保持空间中的内容追加至pattern模式空间中,保持空间数据此时是空的,所以G:是逐行向源文件添加空行:
            所以该命令可以理解为删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
如图显示的源文件空白行没了,但原有内容都附加了空白行:

这里写图片描述
马哥linux培训笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值