文本处理之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)
ZJMZJM
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相关推荐

  • redis主从复制(4)— client buffer

    1、 client buffer的设计 redis server以单进程的方式处理接收到的请求,而redis完成请求有些工作比较慢,比如网络IO和磁盘IO等比较慢的操作。redis为了提高处理客户端请求的响应时间,做了很多优化。比如网络io和磁盘io是异步完成、使用后台进程完成bgsave和bgrewriteaof工作,在server端为客户提供读buffe…

    Linux干货 2016-03-28
  • 3.用户和组管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who root     tty1         2016-12-…

    Linux干货 2017-07-16
  • 文本处理工具 grep

    文件查看:       文件查看命令:cat,tac,rev               cat [OPTION]… [FILE]…            …

    Linux干货 2016-08-07
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • 马哥教育网络班20期+第三周课程练习

    1. 列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [oracle@ocp ~]$ who root     pts/1        2016-06-26 …

    Linux干货 2016-06-26
  • 了解 linux

    计算机组成     CPU  ——> central processing unit, 运算器&控制器             主要工作管理和运算;   &…

    Linux干货 2016-09-17