sed脚本的执行顺序可以简记为:Read,Execute,Print,Repeat(读取,执行,打印,重复)简称REPR

分析脚本的执行顺序:

l 读取一行到模式空间(sed内部的一个临时缓存,用于存放读取到的内容)

l 在模式空间中之心命令。如果使用了{ }或者-e指定了多个命令,sed将依次执行每个命令

l 打印模式空间的内容,然后清空模式空间

l 重复上述过程,直到文件结束

在sed选项中-n参数的作用是屏蔽sed的默认输出,p指定你输出的内容,请对比以下两个例子

[root@sishen ~]# sed 'p' employee.txt

101,John Doe,CEO

101,John Doe,CEO

102,Jason Smith,IT Manager

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

105,Jane Miller,Sales Manager

[root@sishen ~]# sed -n 'p' employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

指定输出范围

示例1 只打印第2行

[root@sishen ~]# sed -n '2p' employee.txt

102,Jason Smith,IT Manager

示例2 打印第1至第4行

[root@sishen ~]# sed -n '1,4p' employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

示例3 打印第2至最后一行

[root@sishen ~]# sed -n '2,$ p' employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

[root@sishen ~]# sed -n '2,$p' employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

注意空格是否有区别

加号+配合逗号使用,可以指定相对若干行,而不是绝对的几行,如n,+m表示第n行开始(含)后的m行

波浪号~也可以指定地址范围,它指定每次要跳过的行数,如n~m表示从第n行开始,每次跳过m行

l 1~2匹配1,3,5,7,···········

l 2~2匹配2,4,6,8,············

l 1~3匹配1,4,7,10,··········

l 2~3匹配2,5,8,11,··········

示例1 只打印奇数行

[root@sishen ~]# sed -n '1~2 p' employee.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

105,Jane Miller,Sales Manager

示例2 打印匹配模式”Jane”的行

[root@sishen ~]# sed -n '/Jane/ p' employee.txt

105,Jane Miller,Sales Manager

打印第一次匹配Jason的行至第4行

[root@sishen ~]# sed -n '/Jason/, 4 p' employee.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

注意如果开始的4行中,没有匹配到Jason,那么sed会打印第4行以后匹配的内容

示例2 打印从第一次匹配Raj的行,到最后的所有行

[root@sishen ~]# sed -n '/Raj/,$ p' employee.txt

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

打印自匹配Raj的行开始到匹配Jane的行之间的所有内容

[root@sishen ~]# sed -n '/Raj/, /Jane/ p' employee.txt

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

打印匹配Jason的行和其后面的两行

[root@sishen ~]# sed -n '/Jane/, +2 p' employee.txt

105,Jane Miller,Sales Manager

注意使用匹配模式后不能和步长(波浪号~)共用

[root@sishen ~]# sed -n '/John/~2 p' employee.txt

sed: -e expression #1, char 7: unknown command: `~'

使用d来删除行,需要注意的是它只删除模式空间的内容,和其他sed命令一样,不会修改原始文件的内容,如果不提供地址范围,sed默认删除所有行

[root@sishen ~]# sed 'd' employee.txt

[root@sishen ~]#

所以什么都不会输出

示例2 只删除第2行

[root@sishen ~]# sed '2d' employee.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

删除第1至第4行

[root@sishen ~]# sed '1,4d' employee.txt

105,Jane Miller,Sales Manager

删除第2行至最后一行

[root@sishen ~]# sed '2,$d' employee.txt

101,John Doe,CEO

只删除奇数行

[root@sishen ~]# sed '1~2d' employee.txt

102,Jason Smith,IT Manager

104,Anand Ram,Developer

只删除偶数行

[root@sishen ~]# sed '2~2d' employee.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

105,Jane Miller,Sales Manager

删除匹配Manager的行

[root@sishen ~]# sed '/Manager/d' employee.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

删除从第一次匹配Jason的行至第4行

[root@sishen ~]# sed '/Jason/,4d' employee.txt

101,John Doe,CEO

105,Jane Miller,Sales Manager

如果开头的4行中没有匹配Jason的行,那么上述命令将删除第4行以后匹配Manager的行

删除第一次匹配Raj的行至最后一行

[root@sishen ~]# sed '/Raj/,$d' employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

删除第一次匹配Jason的行和紧跟其后的2行

[root@sishen ~]# sed '/Jason/,+2d' employee.txt

101,John Doe,CEO

105,Jane Miller,Sales Manager

注意同样 在使用匹配模式的时候不能和步长公用

删除所有的空行

[root@sishen ~]# sed '/^$/ d' employee.txt

删除所有注释的行(或者是以#开头的行)

[root@sishen ~]# sed '/^#/d' employee.txt

注意如果有多个命令,sed遇到命令d时会删除匹配的整行数据,其余的命令将无法操作被删除的行

把模式空间的内容写到文件中(w命令)

把employee.txt文件中的内容输出到output.txt文件中,同时显示在屏幕上

[root@sishen ~]# sed 'w output.txt' employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

[root@sishen ~]# sed -n 'w output1.txt' employee.txt

[root@sishen ~]# cat output1.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

[root@sishen ~]#

注意 加上-n参数就不会打印在屏幕上

只保存第2行以及保存第一至第四行

[root@sishen ~]# sed -n '2 w out2.txt ' employee.txt

[root@sishen ~]# sed -n '1,4 w out4.txt' employee.txt

[root@sishen ~]# cat out2.txt\

102,Jason Smith,IT Manager

[root@sishen ~]# cat out4.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

保存第2行至最后一行

[root@sishen ~]# sed -n '2,$ w outend.txt' employee.txt

[root@sishen ~]# cat outend.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

只保存奇数行

[root@sishen ~]# sed -n '1~2 w out5.txt' employee.txt

[root@sishen ~]# cat out5.txt

101,John Doe,CEO

103,Raj Reddy,Sysadmin

105,Jane Miller,Sales Manager

保存匹配Jane的行

[root@sishen ~]# sed -n '/Jane/ w outj.txt' employee.txt

[root@sishen ~]# cat outj.txt

105,Jane Miller,Sales Manager

保存第一次匹配Jason的行至第4行

[root@sishen ~]# sed -n '/Jason/,4 w outJa.txt' employee.txt

[root@sishen ~]# cat outJa.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

保存第一次匹配Raj的行至最后一行

[root@sishen ~]# sed -n '/Raj/,$ w out3.txt' employee.txt

[root@sishen ~]# cat out3.txt

保存匹配Raj的行至匹配Jane的行

[root@sishen ~]# sed -n '/Raj/,/Jane/ w out4.txt' employee.txt

[root@sishen ~]# cat out4.txt

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

注意:如果开始的4行里没有匹配到Jason,那么该命令只保存第4行以后匹配到Jason行

保存匹配Jason的行以及紧跟在其后的两行

[root@sishen ~]# sed -n '/Jason/,+2 w out6.txt' employee.txt

[root@sishen ~]# cat out6.txt

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

sed简单脚本练习的更多相关文章

  1. Sed简单入门实例

    1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...

  2. SED单行脚本快速参考(Unix 流编辑器)(转)

    sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...

  3. SED单行脚本快速参考(Unix 流编辑器)

    ------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...

  4. Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用

    一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符    2> 将文件中每行的第一个. ...

  5. 编写SHELL脚本--编写简单脚本

    1.简单脚本文件hello.sh,内容如下 #!/bin/bash pwd ls -al 执行脚本:bash hello.sh  或者使用root命令:  ./hello.sh 2.接受用户参数 $0 ...

  6. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  7. Appium Inspector定位元素与录制简单脚本

    本次以微信为例, 使用Appium自带的Inspector定位工具定位元素, 以及进行最最最简单脚本的录制: capabilities = { "platformName": &q ...

  8. 学习 Linux,101: 自定义或编写简单脚本【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及 ...

  9. useradd linux系统创建用户和设置密码简单脚本-1

    useradd linux系统创建用户和设置密码简单脚本-1 linux_wangqiang 2019-12-04 20:51:18 65 收藏展开#!/bin/bash#快速创建用户 使用$1第一个 ...

随机推荐

  1. Android +NDK+eclipse+opengl ES2.0 开启深度測试

    參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...

  2. 自己定义Gradle插件之"Hello World"

    自己定义Gradle插件之"Hello World" 0.新建一个用于开发这个插件的目录 1.确定Plugin id Plugin id一般定义为java 包名. 由字母和数字及& ...

  3. Javascript将字符串日期格式化为yyyy-mm-dd的方法 js number 类型 没有length 属性 string类型才有

    日期格式化相信对于大家来说再熟悉不过,最近工作中自己利用Javascript就写了一个,现在将实现的代码分享给大家,希望对有需要的朋友们能有所帮助,感兴趣的朋友们下面来一起看看吧. 这篇文章主要介绍的 ...

  4. Nginx系列三 内存池的设计

    Nginx的高性能的是用非常多细节来保证,epoll下的多路io异步通知.阶段细分化的异步事件驱动,那么在内存管理这一块也是用了非常大心血.上一篇我们讲到了slab分配器,我们能够能够看到那是对共享内 ...

  5. java重载中的基本类型的自动类型转换

    当传递到函数的参数的数据类型表示的范围小于函数形参的参数类型遵循如下原则 : char类型比较特殊, 直接转换为int:  char ->int ->long->float-> ...

  6. flask的路由配置,特殊装饰器

    1,flask中的路由 endpoint-url_for反向地址 endpoint默认是视图函数名endpoint="雪雪" methods 指定视图函数的请求方式,默认GET d ...

  7. 临时表 数据在 内存 转移时间 将160秒的创建临时表时间放入定时任务 不到1秒的求和时间 hadoop 引入Hadoop 分布式计算

    SELECT SUM(pv) as pv_t  FROM 行 112247817表类型 InnoDB自动递增值 1082428327行格式  Compact索引长度 8.60 GB (9,235,93 ...

  8. mysql10---索引优化

    D:\MYSQL\mysql-winx64\data\WIN-20171216YUR-slow.log是慢日志: ; ; # Time: :.472000Z # # Query_time: Rows_ ...

  9. uboot中关于LCD的代码分析【转】

    本文转载自:http://blog.csdn.net/oqqHuTu12345678/article/details/72236117 以下内容源于朱有鹏<物联网大讲坛>课程的学习,如有侵 ...

  10. ACTION中获得数据的几种方式

    1.第一种是通过公司封装的方法. 2.第二种:是通过IF方法判断 3.第三种是通过:set/get获得