sed 命令多行到多行的定位方式
本文提要:
- sed 命令定位方式的分类
- 着重对 /pattern/,/pattern/ 的定位方式进行阐述
定位方式分类
总体上,只需要分为两类,即:x 和 x,y 。如果在范围后加 ! 则表示取补集,即指定范围之外的所有行。
其中,x 和 y 均有两种形式,即:数字和正则表达式,数字直接指定即可,正则表达式则用 /pattern/ 格式给出。举两个栗子:2,4 表示第 2 行到 第 4 行;/stdio.h/,5 简单说可以阐述为匹配 stdio.h 的行到第 5 行的范围,但是不准确,因为正则表达式匹配的行可能不止一行,更可能比后者行号大,这种情况下要分析其范围,则需要按照一定的规则分析,请看下一节。
另外一些资料说 /pattern/pattern/ 表示查询两个表达式,笔者在自己的平台上测试了发现不行,不知是否打开方式不正确(GNU sed 4.4),但是其支持扩展正则表达式(-E 选项),所以可以用扩展正则实现。
定位方式分析
这里直接给出结论,然后再给出一个简单的极端的栗子用以验证。针对 x,y (x,y均可能是由 /pattern/ 匹配的多行)的匹配方式结论为:
首先假定一个控制输出的开关,然后从首行依次匹配,到 x 集合中的行时,就打开输出开关,允许输出,到 y 集合中的行时,先输出该行,然后关闭输出开关,禁用输出。
这样所有输出的行就是 x,y 的范围,它可能是一个不连续集合。
下面给出一个栗子结束本文:
input.txt
grweag open
hgfds open
gfdsg
geahg close
feaws
grsa close
gfdsg
fdsa open
fdsa
gadfa close
fdsag close
fewag
gerwaef open
gewsa
gewag
gdfsa
执行
$ cat -n input.txt | sed -n '/open/,/close/p'
1 grweag open
2 hgfds open
3 gfdsg
4 geahg close
8 fdsa open
9 fdsa
10 gadfa close
13 gerwaef open
14 gewsa
15 gewag
16 gdfsa
显示的都是自 open 后 到 close 的行,close 后则不显示,直到重新 open;open 后如果没有 close 则其后所有行都在范围内。如此我们可以推测如果 y 如果没有匹配任何一行,则最终的范围应该是 x 中最前面一行到文本的最后一行。
sed 命令多行到多行的定位方式的更多相关文章
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- Linux shell sed命令在文件行首行尾添加字符
昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...
- linux sed命令(擅长输出行)(转)
linux命令总结sed命令详解 Sed 简介 sed 是一种新型的,非交互式的编辑器.它能执行与编辑器 vi 和 ex 相同的编辑任务.sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编 ...
- sed命令给文本文件的每行的行首或者行尾添加文字
在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/ ...
- sed命令入门
什么是sed sed是一种流处理编辑器,可以分割.查找.替换文本. sed命令的处理流程:行处理 Created with Raphaël 2.1.0在shell中执行sed文本或管道输入读入到模式空 ...
- sed命令的基本使用方法
sed命令 stream editor,用程序的方式编辑文本.基本上是玩正则模式匹配. 用s命令替换 $ sed "s/my/Hao Chen's/g" pets.txt 单引号去 ...
- 掌握Sed命令
带书签PDF版,喜欢的话,欢迎多提意见和建议,你的支持是血蝙蝠最大的前进动力! http://download.csdn.net/detail/challenge_c_plusplus/6480007 ...
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- sed 命令使用入门
上一篇说了 awk 命令的基本使用方法,这一篇就来说说其兄弟 sed 的使用方法吧(传说之中,Linux 命令行下处理文件文件三大上古神器:grep.awk.sed,每一个都很好很强大,有时间了说说 ...
随机推荐
- POI--HSSFWorkbook类
HSSFWorkbook类 要生成一个Workbook,需要用到HSSFWorkbook类文件.构造器如下: 现在我们使用2种方式来获得一个Workbook对象. 1,创建excel表 HSSFWor ...
- 四、Html常用标签
1,列表相关标签 <ul>:定义无序列表,只能包含<li>子元素 <ol>:定义有序列表,只能包含<li>子元素,因为这个标签是有序的,所有这个标签还有 ...
- 输入和输出--java序列化机制
对象的序列化 什么是Java对象的序列化? 对象序列化的目标是将对象保存到磁盘上,或允许在网络中直接传输对象.对象序列化机制允许把内存中的Java对象转换成与平台无关的二进制流,从而保存或者传输.其他 ...
- LINUX读写文件区别
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- SQL 2005/2008 连接SQL 2000报18456错误
在看文章前,你先看看下面这两个问题,考考你对MSSMS工具的掌握情况: 1: SQL 2005/2008 能连接 SQL 2000数据库服务器吗? 2: SQL 2000 能连接SQL 2005/20 ...
- docker入门(二)容器与镜像的理解
10张图带你深入理解Docker容器和镜像 申明:此篇文章是转载的(原文地址http://dockone.io/article/783),今天意外发现已经有人转载了(复制了),希望大家关注原创 原本打 ...
- matlab文件读写处理实例(一)——不规则文件读取
数据: A) Title: Income Data B) Relevant Information: Marketing Database. Source: Impact Resources, Inc ...
- JS小练习1
要求: 一.定义"改变颜色"的函数 二.定义"改变宽高"的函数 三.定义"隐藏内容"的函数 四.定义"显示内容"的函数 ...
- 企业级Docker私有仓库之Harbor部署(http)
部署环境 Centos7.3 x64 docker-ce-17.06.0 docker-compose-1.15.0 Python-2.7.5(系统默认) Docker及Docker-compose安 ...
- ajax实现异步校验
1.ajax介绍 见过百度的搜索框吗?当你输入一个关键词,下面立马会出现一些相关的热词,这就是用ajax做到的. 2.环境设想: 有一个注册页面.jsp <span id="mess& ...