文本处理之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

相关推荐

  • centos 7 修改sshd服务默认端口号

    由于最近sshd服务默认端口号22被匿名进行试探性的进行登入,为防止匿名用户再次进行试探性的登入,将sshd服务的默认端口号进行修改。 环境:centos 7.3  xshell 思路:先将sshd的被指文件进行修改,把sshd服务的默认端口号修改为所需要的端口号,然后重启sshd服务,发现重启报错。找其原因是应为selinux不允许自定义sshd…

    Linux干货 2017-04-06
  • linux常用网络配置

    网卡名称:  网络接口识别并命名相关的udev配置文件:    /etc/udev/rules.d/70-persistent-net.rules  卸载网卡驱动:    modprobe  -r e1000  装载网卡驱动:    modprobe &nbs…

    Linux干货 2016-09-06
  • 制作引导分区

      使用虚拟机制作一个可以引导启动的简单系统。方法如下:   一、制作两个分区     1、添加一块新的硬盘,新建两个分区,格式化并挂载到/mnt/boot和/mnt/sysroot目录中;虚拟机添加硬盘的操作很简单就不做演示了,要注意的是添加的硬盘最好选择成“将虚拟磁盘存储为单个个文件”,并为将文件名修改为容易识别的…

    Linux干货 2016-01-18
  • 恐怖的C++语言

    Linus曾经(2007年9月)在新闻组gmane.comp.version-control.git里和一个微软的工程师(Dmitry Kakurin)争执过用C还是用C++,当时的那个微软的工程师主要是在做Git的Windows版,但他却发现Git的源码居然是C语言写的,而不是C++,于是他(Dmitry Kakurin)在Linux社区里发贴表示对Lin…

    Linux干货 2015-04-03
  • shell脚本编程之if条件判断与for、while、until循环

    一、if语句 语法: if 测试条件1 ; then        分支1 elif  测试条件2; then        分支2 … else&nbsp…

    Linux干货 2015-08-24
  • N25期–第十七周作业

    1、  结合图形描述LVS的工作原理; 针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。 虚拟服务器的体系结构如图所示,一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(…

    2017-05-08