【转】 SED多行模式空间
1、
sed执行模板=sed '模式{命令1;命令2}'
即逐行读入模式空间,执行命令,最后输出打印出来
2、
为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间开端至\n的内容,并追加到默认输出之前。
sed并不对每行末尾\n进行处理,但是对N命令追加的行间\n进行处理,因为此时sed将两行看做一行。
2-1、n命令
n命令简单来说就是提前读取下一行,覆盖模型空间前一行(并没有删除,因此依然打印至标准输出),如果命令未执行成功(并非跳过:前端条件不匹配),则放弃之后的任何命令,并对新读取的内容,重头执行sed。
例子:
从aaa文件中取出偶数行
1
2
3
4
5
6
7
8
9
10
|
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed -n 'n;p' aaa //-n 表示隐藏默认输出内容
This is 2
This is 4
|
注 释:读取This is 1,执行n命令,此时模式空间为This is 2,执行p,打印模式空间内容This is 2,之后读取 This is 3,执行n命令,此时模式空间为This is 4,执行p,打印模式空间内容This is 4,之后读取This is 5,执行n 命令,因为没有了,所以退出,并放弃p命令。
因此,最终打印出来的就是偶数行。
2-2、N命令
N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有\n换行符,如果命令未执行成功(并非跳过:前端条件不匹配),则放弃之后任何命令,并对新读取的内容,重头执行sed。
例子:
从aaa文件中读取奇数行
1
2
3
4
5
6
7
8
9
10
11
|
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed -n '$!N;P' aaa
This is 1
This is 3
This is 5
|
注释中1代表This is 1 2代表This is 2 以此类推
注释:读取1,$!条件满足(不是尾行),执行N命令,得出1\n2,执行P,打印得1,读取3,$!条件满足(不是尾行),执行N命令,得出3\n4,执行P,打印得3,读取5,$!条件不满足,跳过N,执行P,打印得5
2-3、d命令
d命令是删除当前模式空间内容(不在传至标准输出),并放弃之后的命令,并对新读取的内容,重头执行sed。
d命令例子
从aaa文件中取出奇数行
1
2
3
4
5
6
7
8
9
10
11
|
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed 'n;d' aaa
This is 1
This is 3
This is 5
|
注释:读取1,执行n,得出2,执行d,删除2,得空,以此类推,读取3,执行n,得出4,执行d,删除4,得空,但是读取5时,因为n无法执行,所以d不执行。因无-n参数,故输出1\n3\n5
2-4、D命令
D命令是删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。
D命令例子
从aaa文件中读取最后一行
1
2
3
4
5
6
7
8
9
|
cat aaa
This is 1
This is 2
This is 3
This is 4
This is 5
sed 'N;D' aaa
This is 5
|
注释:读取1,执行N,得出1\n2,执行D,得出2,执行N,得出2\n3,执行D,得出3,依此类推,得出5,执行N,条件失败退出,因无-n参数,故输出5
2-5、y命令
y命令的作用在于字符转换
y命令例子:
将aaa文件内容大写
1
2
3
4
5
6
|
sed 'y/his/HIS/' aaa
THIS IS 1
THIS IS 2
THIS IS 3
THIS IS 4
THIS IS 5
|
此外,如果需要对某个字符串进行大小写转换,则可使用如下方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cat ddd
This is a and a is 1
This is b and b is 2
This is c and c is 3
This is d and d is 4
This is e and e is 5
sed 's/\b[a-z]\b/\u&/g' ddd
This is A and A is 1
This is B and B is 2
This is C and C is 3
This is D and D is 4
This is E and E is 5
|
2-6、h命令,H命令,g命令,G命令
h命令是将当前模式空间中内容覆盖至保持空间,H命令是将当前模式空间中的内容追加至保持空间
g命令是将当前保持空间中内容覆盖至模式空间,G命令是将当前保持空间中的内容追加至模式空间
命令例子:
将ddd文件中数字和字母互换,并将字母大写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
cat ddd. sed
h
{
s/.*is \(.*\) and .*/\1/
y /abcde/ABCDE/
G
s/\(.*\)\n\(.*is \).*\(and \).*\(is \)\(.*\)/\2\5 \3\5 \4\1/
}
sed -f ddd. sed ddd
This is 1 and 1 is A
This is 2 and 2 is B
This is 3 and 3 is C
This is 4 and 4 is D
This is 5 and 5 is E
|
注释:读取1,执行h,复制到保持空间,执行s,模式空间得到匹配到的字母a,然后执行y,将a转成A,执行G,追加保持空间内容到模式空间,得
A\nThis is a and a is 1;执行s,重新排列,得出This is 1 and 1 is A;以此类推,得出结果。
这里需要注意的是匹配的内容中,空格一定要处理好,空格处理不对,会造成第二次s匹配错误,无法执行重新排列或排列错误
2-7、x命令
x命令是将当前保持空间和模式空间内容互换
转自:http://hi.baidu.com/aaa103439/item/dbaa6d0d27b4f812cc34eab8
转载于:https://www.cnblogs.com/nhlinkin/p/3566619.html
【转】 SED多行模式空间相关推荐
- sed模式空间(pattern space)和保持空间(hold space)
前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法,本节就详细讲解一下sed的模式空间和保持空间 前面基本用法中也有提到模式空间,即为处理文件中一行内容 ...
- 通过几个例子看sed的模式空间与保持空间
SED之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的"模式空间(pattern space)",另一个是起辅助作用的"暂存缓冲区(holdi ...
- 打开高效文本编辑之门_Linux sed之模式空间与保留空间
Linux sed之模式空间保留空间使用案例 声明与简介 sed:Stream Editor文本流编辑器,sed是一个"非交互式的"面向字符流的编辑器.本文主要结合数据以案例形式介 ...
- Linux sed 打印模式空间p命令使用案例
Linux sed p命令使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个"非交互式的"面向字符流的编辑器. 本文主要以实际的数据来介绍sed的pr ...
- sed知识整理:模式空间
转载自: http://blog.csdn.net/wanglelelihuanhuan/article/details/51591809 sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了 ...
- linux sed 空间模式,整理:SED的模式空间与缓冲区及n,N,d,D,p,P,h,H,g,G,x解析...
sed命令n,N,d,D,p,P,h,H,g,G,x解析 1.sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2.p打印当前模式空间所有内容,追加到 ...
- sed高级命令及模式空间和交换空间简介
高级命令 之前我们用到的sed命令都是一行一行的进行处理文本的,不过有些时候单行处理可能并不能满足我们的需要,所以sed还提供了多行模式,多行模式的命令主要有NPD这三个, N:读取匹配到的行的下一行 ...
- linux sed 循环多行,linux sed 多行处理详细总结
在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空:然后重复刚才的动作,文件中的新的一行被读入,直到文件处理完备. ...
- SQL Server 2019中的行模式内存授予反馈
In this article, I'll be exploring another new feature with SQL Server 2019, row mode memory grant f ...
最新文章
- JavaScript 技术篇-js获取document的几种方式,js获取dom元素的常用方法。
- 两个tplink路由器有线桥接_tplink和腾达路由器有线桥接设置图解
- 在Payara Server和GlassFish中配置密码
- imx6 mac地址设置
- Redis解读持久化RDB和AOF原理
- 微信抢红包代码 python_python实现红包裂变算法
- 机器学习-ID3决策树算法(附matlab/octave代码)
- android沿曲线移动,Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation
- mysql 参照完整性规则_MySQL存储引擎你们知道多少?
- 最新!泰晤士2021亚洲大学排名发布:91所中国大陆高校上榜!
- 重磅预告!企业上云的正确姿势
- ExtJs6 FontAwesome 图标引用
- Linux三剑客之SED
- 《2015年中国公有云服务发展报告》跋
- DELL服务器bios文件编辑,BIOS维修网站www.biosrepair.com-DELL 1600SC服务器BIOS分离过程...
- 常见的 360° 全景视频格式介绍及播放方式
- 这个七夕,送你一份程序员教科书级别的告白指南
- 计算机在英语专业的应用论文,计算机英语双语应用分析论文
- 如何查看网易云笔记自己曾经使用过的设备
- Halcon识别金属上的雕刻字符
热门文章
- 【微信小程序】token/session失效了该怎么跳转页面
- linux 文件重命名_Linux编程 5 (目录重命名与移动 删除,目录创建删除,查看file)...
- just函数python_提升 Python 性能 Numba 与 Cython
- php环境搭建5.6_WIN8.1下搭建PHP5.6环境
- 生成报告配置xml_自动化测试报告太丑?Allure拯救你!
- python在线翻译脚本_用python实现百度翻译的示例代码
- windows连接远程Hadoop/Spark
- ubuntu配置dns
- Chrome常用快捷键整理汇总
- 27 个问题,告诉你Python为什么这么设计