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,每一个都很好很强大,有时间了说说 ...
随机推荐
- 【视频编解码·学习笔记】4. H.264的码流封装格式
一.码流封装格式简单介绍: H.264的语法元素进行编码后,生成的输出数据都封装为NAL Unit进行传递,多个NAL Unit的数据组合在一起形成总的输出码流.对于不同的应用场景,NAL规定了一种通 ...
- 浅谈python中的闭包函数
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...
- mysql插入数据时检查是否某字段已存在
SELECT\n" + " '',\n" + " '{0}',\n" + " '{1}',\n" + " '{2}'\n ...
- js 数组的一些基本操作
var arr1 = [1,2,3,4,5,6]; arr1[0]; arr1[1]; console.log("长度:"+arr1.length); 一.遍 ...
- SpringMVC源码情操陶冶-DispatcherServlet父类简析
阅读源码有助于陶冶情操,本文对springmvc作个简单的向导 springmvc-web.xml配置 <servlet> <servlet-name>dispatch< ...
- HDU 4825 Xor sum
trie树的异或和问题 本题是一道经典题,使用trie树维护所给出的集合,我们知道等比数列前n项的和比第n+1项小,所以本题可以使用贪心策略,对于每一个询问,我们从高位向低位匹配,寻找最大异或值,向下 ...
- AMDP + XSLX Workbench 报表开发模式
本文介绍了我和同事通过使用AMDP + XSLX Workbench缩短报表开发周期.分离数据查询处理逻辑和前端展示工作的经验.欢迎讨论. 前言 最近接到了一套人力资源报表的开发需求,需要以EXCEL ...
- Visual Studio 2017 for Mac 快捷键
格式化代码: ^I 转到定义:⌘D 注释/反注释: ⌘/ 生成:⌘B 重新生成:^⌘B 调试运行:⌘↩ 不调试运行:⌥⌘↩ 添加/删除断点:⌘\ 查看所有断点:⌥⌘↩ 放大:⌘+ 缩小:⌘- 正常大 ...
- python中的randint,引入模块
引入模块的方法: from 模块名 import 方法名 范例: from random import randint#使用randint需要加上这句 while True: answer=randi ...
- SpringMVC常见注解
@RequestParam( value="name", require=false ) String wrap 参数绑定:require=false 表示前端对 name 这个 ...