设为首页 收藏本站
查看: 266|回复: 0

[经验分享] sed原理与用法详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-15 10:01:38 | 显示全部楼层 |阅读模式

引 入        


       sed文本处理三剑客之一(grep,sed,awk),主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面来简单介绍一下sed。


一、sed工作原理:


QQ截图20160215100137.png
sed处理文件流程:
1、一行一行地,把读取到的文件copy到sed自己的工作车间中,即模式空间中。

2、在模式空间中判断这一行是否被相关条件所匹配。
        匹配到的,做相关的编辑处理,然后输出。

        匹配不到的,默认标准输出。
注意:除了模式空间,sed还有另外一个内存处理空间,我们称为保持空间,这两个空间的内容可以有交互,不过我们一般很少用到。


二、sed用法:


sed [OPTION]...  'script'  [input-file] ...
    script:
            地址定界编辑命令
    常用选项:
        -n:不输出模式空间中的内容至屏幕;默认是输出的。
        -e script, --expression=script:多点编辑;
        -f  /PATH/TO/SED_SCRIPT_FILE
            每行一个编辑命令;
        -r, --regexp-extended:支持使用扩展正则表达式;
        -i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;危险行为,慎用。

    地址定界:
        (1) 空地址:对全文进行处理;
        (2) 单地址:
            #:指定行;
            /pattern/:被此模式所匹配到的每一行;
        (3) 地址范围
            #,#:
            #,+#:
            #,/pat1/
            /pat1/,/pat2/
            $:最后一行;
        (4) 步进:~
            1~2:所有奇数行
            2~2:所有偶数行
    编辑命令:
        d:删除;
        p:显示定界选定的模式空间中的内容;
        a  \text:在行后面追加文本“text”,支持使用\n实现多行追加;
        i  \text:在行前面插入文本“text”,支持使用\n实现多行插入;
        c  \text:把匹配到的行替换为此处指定的文本“text”;
        w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
        r  /PATH/FROM/SOMEFILE:读取指定文件内容至当前文件被模式匹配到的行后面;文件合并;
        =:为模式匹配到的行打印行号;
        !:条件取反;
            用法:地址定界!编辑命令;
        s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
                替换标记:
                    g:全局替换;
                    w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
                    p:显示替换成功的行;


三、sed实例:


文件:sedTest.txt
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13

1)找到以north开头的行并在其后添加很多FUCK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@node1 tmp]# sed '/^north/a\FUCK' sedTest.txt
northwest NW Charles Main 3.0 .98 3 34
FUCK
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
FUCK
north NO Margot Weber 4.5 .89 5 9
FUCK
central CT Ann Stephens 5.7 .94 5 13
[iyunv@node1 tmp]#



2)把有south的行全部用FUCK取代   
1
2
3
4
5
6
7
8
9
10
11
[iyunv@node1 tmp]# sed '/south/c\FUCK' sedTest.txt
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
FUCK
FUCK
FUCK
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[iyunv@node1 tmp]#



3)删除1-4行  
1
2
3
4
5
6
7
[iyunv@node1 tmp]#  sed '1,4d' sedTest.txt
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[iyunv@node1 tmp]#



4)寻找大于1少于10的一位小数并用FUCK+&替代。这里的&保存了前面的小数
1
2
3
4
5
6
7
8
9
10
11
[iyunv@node1 tmp]# sed  's/[0-9]\.[0-9]/FUCK&/g' sedTest.txt
northwest NW Charles Main FUCK3.0 .98 3 34
western WE Sharon Gray FUCK5.3 .97 5 23
southwest SW Lewis Dalsass FUCK2.7 .8 2 18
southern SO Suan Chin FUCK5.1 .95 4 15
southeast SE Patricia Hemenway FUCK4.0 .7 4 17
eastern EA TB Savage FUCK4.4 .84 5 20
northeast NE AM Main Jr. FUCK5.1 .94 3 13
north NO Margot Weber FUCK4.5 .89 5 9
central CT Ann Stephens FUCK5.7 .94 5 13
[iyunv@node1 tmp]#



5)显示仅包含north的行   
1
2
3
4
5
[iyunv@node1 tmp]#  sed -n '/north/p'  sedTest.txt
northwest NW Charles Main 3.0 .98 3 34
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
[iyunv@node1 tmp]#



6)显示奇数行

1
2
3
4
5
6
7
[iyunv@node1 tmp]# sed -n '1~2p' sedTest.txt
northwest NW Charles Main 3.0 .98 3 34
southwest SW Lewis Dalsass 2.7 .8 2 18
southeast SE Patricia Hemenway 4.0 .7 4 17
northeast NE AM Main Jr. 5.1 .94 3 13
central CT Ann Stephens 5.7 .94 5 13
[iyunv@node1 tmp]#



7)从第4行开始显示,并且把Hemenway改为Jones

1
2
3
4
5
6
7
8
[iyunv@node1 tmp]#  sed  '1,3d;s/Hemenway/Jones/g' sedTest.txt
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Jones 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 .94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
[iyunv@node1 tmp]#



本题实现的另一写法:sed -e '1,3d' -e 's/Hemenway/Jones/g' sed.txt


四、补充sed的高级用法:

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

    示例:
        sed  -n  'n;p'  FILE:显示偶数行;
        sed  '1!G;h;$!d'  FILE:逆序显示文件的内容;
        sed  ’$!d'  FILE:取出最后一行;
        sed  '$!N;$!D' FILE:取出文件后两行;
        sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
        sed  'n;d'  FILE:显示奇数行;
        sed 'G' FILE:在原有的每行后方添加一个空白行;

结 语   


        sed功能非常强大,熟练的使用会给我们在做文本编辑的时候带来想不到的方便。不过它在处理列的时候还是比不过awk,下一篇我们来说说awk。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-178055-1-1.html 上篇帖子: linux下的java环境变量设置 下篇帖子: Linux符号连接的层数过多
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表