Linux sed 命令使用小结

来源:互联网 发布:手动抓取淘宝数据包 编辑:程序博客网 时间:2024/05/18 01:26

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

文本处理三剑客:    Grep egrep fgrep    Sed:stream Editor,流编辑器 行    awk:文本格式化工具,报告生成器Sed官方解释如下: sed - stream editor for filtering and transforming textSed工作流程:

这里写图片描述

    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