第十八章、文本处理三剑客之sed命令

目录

  • sed介绍
  • sed命令常用选项
  • sed常用编辑命令
  • sed使用示例
  • sed高级语法

18.1、sed简介

sed全名stream editor,流编辑器,sed一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,称为"模式空间",然后根据指定的模式去处理模式空间中的内容,处理完成后,把缓冲区中的内容输出到标准输出,接着处理下一行,不断执行,知道文件末尾,默认不修改原文件。

18.2、常用选项

  1. -n:不输出模式空间中内容至屏幕;
  2. -e:多点编辑,能同时使用多个-e
  3. -f /PATH/TO/SED_SCRIPT_FILE:从指定的文件中读取sed命令,每行一个编辑命令
  4. -r:支持使用扩展正则表达式;
  5. -i:直接编辑原文件;

18.3、地址定界

1、空地址:对全文进行处理;

2、单地址:

  1. #:指定行,#表示数字;
  2. /pattern/:被此模式所匹配到的每一行;

3、地址范围

  1. #,#:#表示数字,例如:sed -n '1,3p'表示第一行到第三行;
  2. #,+#:#表示数字,例如:sed -n '3,+3p'表示从第3行向下加3行不包括第三行;
  3. #,/pattern/:表示从#开始的行开始向下匹配,能够被pattern所匹配到的内容;
  4. /pattern/,/pattern/:表示第一个被pattern匹配到的内容到第二个被pattern匹配到的内容之间的所有内容;
  5. $:表示最后一行;

4、步近

  1. 1~2:表示所有奇数行;
  2. 22:表示所有偶数行;

示例

  1. [root@www tmp]# sed -n '1~2p' test.txt
  2. 1
  3. 3
  4. 5
  5. 7
  6. 9
  7. [root@www tmp]# sed -n '2~2p' test.txt
  8. 2
  9. 4
  10. 6
  11. 8
  12. 10

18.4、常用编辑命令

  1. d:删除
  2. p:显示模式空间中的内容;
  3. a \text:在被pattern匹配到的行后面追加文本"text";
  4. i \text:在被pattern匹配到的行前面追加文本"text";
  5. c \text:把匹配到的行替换为此处指定的文本"text"
  6. w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
  7. r /PATH/FROM/SOMEFILE:读取指定的文件内容至当前文件被模式匹配到的行后面;文件合并;
  8. =:为模式匹配到的行打印行号;
  9. !:条件取反;
  10. s:查找替换,其分隔符可自定义,常用的有:s@@@, s###;
  11. 替换标记:
  12. g:全局替换;
  13. w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
  14. p:显示替换成功的行;

18.5、示例

练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的空白字符;

  1. [root@www tmp]# sed 's/^[[:space:]]\+//g' /etc/grub2.cfg

练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有的空白字符;

  1. [root@www tmp]# sed 's@^#[[:space:]]*@@g' /etc/fstab

练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似dirname;

  1. [root@www tmp]# echo "/var/log/messages" | sed 's@[^/]\+/\?$@@g'
  2. /var/log/

练习4、找出/etc/passwd文件中daemon用户所在行的行号;

  1. [root@www tmp]# sed -n '3p' /etc/passwd
  2. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  3. [root@www tmp]# sed -n '/^daemon/=' /etc/passwd
  4. 3

练习5:找出nginx访问日志中20:35到21点之间的所有日志;

  1. [root@www nginx]# sed -n "/\[29\/Dec\/2016:20:35:.* +0800\]/,/\[29\/Dec\/2016:21:.*:.* +0800\]/"p access.log
  2. 192.168.1.160 - - [29/Dec/2016:20:35:28 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
  3. 192.168.1.106 - - [29/Dec/2016:21:12:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" "-"

18.6、sed高级编辑命令

  1. h:把模式空间中的内容覆盖至保持空间中;
  2. H:把模式空间中的内容追加至保持空间中;
  3. g:把保持空间中的内容覆盖至模式空间中;
  4. G:把保持空间中的内容追加至模式空间中;
  5. x:把模式空间中的内容与保持空间中的内容互换;
  6. n:覆盖读取匹配到的行的下一行至模式空间中;
  7. N:追加读取匹配到的行的下一行至模式空间中;
  8. d:删除模式空间中的行;
  9. D:删除多行模式空间中的所有行;

示例

  1. sed -n 'n;p' FILE:显示偶数行;
  2. sed '1!G;h;$!d' FILE:逆序显示文件的内容
  3. sed '$!d' FILE:取出最后一行
  4. sed 'n;d' /etc/fstab:显示奇数行;
  5. sed 'G' FILE:在原有的每行后面添加一个空白行;

文本处理三剑客之sed命令的更多相关文章

  1. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...

  2. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  3. day14 linux三剑客之sed命令

    day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...

  4. Shell三剑客之sed命令

    Sed简介 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具,常用功能有增删改查. Sed命令执行流程 Sed语法格式 Sed [option] ‘[匹配][处 ...

  5. Linux文本处理三剑客之sed

    推荐新手阅读[酷壳]或[骏马金龙]开篇的教程作为入门.骏马兄后面的文章以及官方英文文档较难. [酷壳]:https://coolshell.cn/articles/9104.html [骏马金龙-博客 ...

  6. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  7. 文本处理三剑客之sed

    sed 1.简介 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patternspace),接着用sed命令处理缓冲区中的内 ...

  8. 文本处理三剑客之 sed详解

    1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  9. 【OS_Linux】三大文本处理工具之sed命令

    1.sed命令的简介及用法 sed:即为流编辑器,“stream editor”的缩写.他先将源文件读取到临时缓存区(也叫模式空间)中,再对满足匹配条件的各行执行sed命令.sed命令只针对缓存区中的 ...

随机推荐

  1. 简单例子了解View的事件分发

    什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...

  2. Windows 10 安装SVN 不显示状态图标--解决方法

    升级win10以后,什么都正常,就是svn版本库图标不见了,图标的显示有助于我们定位代码的修改及提交情况,该怎么办呢? 下面分享详细的解决办法亲测有用: 其实也比较简单, 在注册表中找到此项: HKE ...

  3. python描述符理解

    Python中的描述符是一个相对底层的概念 descriptor Any object which defines the methods get(), set(), or delete(). Whe ...

  4. 设计C/S架构应用程序的并发功能

    C/S架构的ERP.CRM程序有的是以并发点(Concurrency)来销售,并发点是指同时在线人数.并发数量大时,理论上程序的运行速度会慢,软件供应商(vendor)也以控制并发的上限以解决客户对系 ...

  5. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

  7. ASP.NET(IIS)出现"没有为请求类型"GET"找到 HTTP 处理程序"

    pasting 环       境:windows 2003 IIS6.0 程序支持:ASP.NET .NET版本:2.0.4.0 问    题:之前服务器上各大网站运行良好,今天突然出现:" ...

  8. 一个前端所需具备的PS能力

    前端网页设计+静态实现案例 放一个2天半内给某公司完成的(设计 + 静态实现)的案例吧,静态阴影用CSS3实现的http://www.cnblogs.com/MuYunyun/p/5693615.ht ...

  9. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  10. 【QuickHit项目实例】

    关于java面向对象QuickHit项目实例 Game类:用来得到随机出现的字符串(随机打印的字符串,然后玩家进行输入字符串) public class Game { private String s ...