文本处理之sed

 sed:是一种行编辑器,它在处理行时会把要处理的行读入模式空间中,处理的是模式空间的内容,一行一行的处理,然后把处理结果显示在屏幕中,不对原文做修改,除非强制重定向。

  好处:可同时编辑一个或多个文件,简化了对文件的反复操作。

sed用法:

  格式: sed [options ]…'script' inputfile

常用选项:

     -n:不把模式空间的的内容自动打印(只显示匹配行)

     -e:同时编辑多个命令时使用

     -f /PATH/TO/SCRIPT-FILE:从指定文件中读取编辑脚本

     -r:使用扩展正则表达式

     -i:对原文件进行编辑

示例:

 -n选项

[root@myhost bin]# sed -n '10p' /etc/passwd      打印/etc/passwd文件中的第十行

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

  -e选项                             

[root@myhost bin]# cat file                 

lksjjkfl

kjdskjlkj

kdddllkfl

[root@myhost bin]# sed -e 's/l/L/' -e 's/d/D/' file     把file文件中每行第一个l换成L,d换成D

Lksjjkfl

kjDskjLkj

kDddLlkfl

  -i选项

[root@myhost bin]# sed -i '1d' file        删除file原文件中的第一行

[root@myhost bin]# cat file

kjdskjlkj

kdddllkfl

地址定界:

   1、不给地址:对全文进行处理

   2、单地址:

        #:指定的行

        /pattern/:被此处模式所能够匹配到的每一行

   3、地址范围:

        #,#:第几行到第几行

        #,+#:从第#行开始往后+#行

       /pat1/,/pat2/ :匹配模式1到模式2之间的行

       #,/pat1/:从第#行开始到匹配到模式1这行之间的行

   4、~:步进

     1~2:奇数行步进

     2~2:偶数行步进

编辑命令:

     d:删除模式空间匹配到的行

     p:显示模式空间中的内容

     a /text:在行后面追加文本,支持\n实现多行追加 

     i /text:在行前面追加文本,支持\n实现多行追加

     c /text:替换行为单行或多行文本

     w /path/to/somefile:保存模式匹配到的行至指定文件中

     r /path/to/somefile:读取指定文件的内容至模式空间中匹配到的行后

     =:为模式空间中的行打印行号

     !:模式空间中匹配行取反处理

 重要编辑命令:

    s///:查找替换,支持使用其他分隔符,如:s$$$ s### s@@@

     替换标记:

          g:行内全局替换

          p:显示替换成功的行

          w /path/to/somefile:将替换成功的行保存至文件中

          i:不区分大小写

示例:

[root@myhost bin]# cat file

kjdskjlkj

kdddllkfl

[root@myhost bin]# sed '3d' file              删除file文件中的第三行

kjdskjlkj

[root@myhost bin]# sed '/^$/a\hellow' file       在file文件中空行的后面添加一行hellow

kjdskjlkj

hellow

kdddllkfl

[root@myhost bin]# sed -n '/^$/=' file          显示file文件中空行的行号

2

[root@myhost bin]# sed 's/k/&KK/' file          把fiel文件中每行的第一个k替换为kKK

kKKjdskjlkj

kKKdddllkfl

[root@myhost bin]# sed 's/k/KK&/' file          把fiel文件中每行的第一个k替换为KKk

KKkjdskjlkj

KKkdddllkfl

sed工具的高级编辑命令

             h:把模式空间中的内容覆盖至保持空间中

             H:把模式空间中的内容追加至保持空间中

             g:从保持空间取出数据覆盖至模式空间中

             G:从保持空间中取出内容追加至模式空间中

             x:把模式空间中的内容与保持空间中的内容互换

             n:读取匹配到的行的下一行覆盖至模式空间

             N:追加匹配到的行的下一行覆盖至模式空间

             d:删除模式空间中的行

             D:删除当前模式空间开端至\n的内容(不再传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed


sed命令练习题:

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的 空白字符 ?

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空 白字符的行的行首的#和空白字符 ?

3、在/root/install.log每一行行首增加#号 ?

4、在/etc/fstab文件中不以#开头的行的行首增加#号 ?

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名 ?

6、利用sed 取出ifconfig命令中本机的IPv4地址 ?

7、统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数


解答:

1、操作及效果

1.png

2、操作及效果

2.png

3、操作

3.1.png

 前后效果对比

3.2.png

4、操作前

QQ截图20160813103257.png

 操作后效果

新.png

5、操作和效果

基名.png

6、操作效果

ifconfig.png

7、用两种方法

她她她.png

原创文章,作者:ZJM,如若转载,请注明出处:http://www.178linux.com/33245

(0)
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相关推荐

  • Linux文本处理工具和正则表达式

    概述:     Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常…

    Linux干货 2016-08-07
  • 网络第21期第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# fdisk /dev/sdb WARNING: DOS-compatible m…

    Linux干货 2016-10-09
  • SSH服务器实现telnet请求转发

    本次实验做的工作如下图: 中间一台CentOS6通过SSH转发两边两台CentOS7的telnet通信。 首先,在右侧CentOS7上安装telnet服务 [root@Shining ~]# yum install -y telnet telnet-server 启动telnet服务 [root@Shining ~]# systemctl start tel…

    Linux干货 2016-12-04
  • 基于heartbeat v2 crm实现基于nfs的mysql高可用集群

    前言 因heartbeat v1内置的资源管理器haresource功能比较简单,且不支持图形化管理,所以heartbeat v2不再支持haresource,转而使用更加强大的资源管理器crm进行集群管理。本文将讲解如何基于heartbeat v2 crm实现基于nfs的mysql高可用集群。 高可用实现 实验拓扑 实验环境 node1:172.16.10…

    Linux干货 2015-06-11
  • haproxy代理服务

    HAProxy: LB Cluster:         四层:   lvs, nginx(stream),haproxy(mode tcp)         七层:   http: nginx(http, ngx_http_upstrea…

    Linux干货 2017-05-17
  • 防火墙原理以及iptables重要实践

    防火墙 主机间通信大致过程: 请求报文由客户端IP+PORT和服务器端IP+PORT构成。当客户端网络地址和服务端地址在同一网段时,不需要经由路由转发,可以直接到目标服务器,再经由服务器端口请求道所需资源; 当服务器端和客户端不在同一网段时。目标IP和源IP是不会改变的,会经由互联网中的路由器,按照其的路由表,指向该路由器的下一跳主机,知道找到服务器端所在网…

    2017-06-18