sed简单脚本练习
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简单脚本练习的更多相关文章
- Sed简单入门实例
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
- SED单行脚本快速参考(Unix 流编辑器)(转)
sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...
- SED单行脚本快速参考(Unix 流编辑器)
------------------------------------------------------------------------- SED单行脚本快速参考(Unix 流编辑器) 200 ...
- Shell基础(五):sed基本用法、使用sed修改系统配置、sed多行文本处理、sed综合脚本应用
一.sed基本用法 目标: 本案例要求熟悉sed命令的p.d.s等常见操作,并结合正则表达式,完成以下任务: 1> 删除文件中每行的第二个.最后一个字符 2> 将文件中每行的第一个. ...
- 编写SHELL脚本--编写简单脚本
1.简单脚本文件hello.sh,内容如下 #!/bin/bash pwd ls -al 执行脚本:bash hello.sh 或者使用root命令: ./hello.sh 2.接受用户参数 $0 ...
- Oracle简单脚本演示样例
Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR VARCHAR2( ...
- Appium Inspector定位元素与录制简单脚本
本次以微信为例, 使用Appium自带的Inspector定位工具定位元素, 以及进行最最最简单脚本的录制: capabilities = { "platformName": &q ...
- 学习 Linux,101: 自定义或编写简单脚本【转】
转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及 ...
- useradd linux系统创建用户和设置密码简单脚本-1
useradd linux系统创建用户和设置密码简单脚本-1 linux_wangqiang 2019-12-04 20:51:18 65 收藏展开#!/bin/bash#快速创建用户 使用$1第一个 ...
随机推荐
- 分享一个非常屌的eazyui二开demo
eazyui二开Demo非常吊,里面各种非常吊的样例,最喜欢的是 多文件进度条上传,一次可多选,还有流程,还有文本编辑器 非常简洁的 不像一些官网各种复杂的东西.主要为自己保留一份, 在线demo在 ...
- Python爬虫开发【第1篇】【Scrapy框架】
Scrapy 框架介绍 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架. Srapy框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以 ...
- 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理
一.PHP基础 1,标记和注释 ①<?php?> ②单行注释// 多行注释/** */2, 输出语句 ①echo输出 echo可以输出多个字符串,用逗号隔开. ②print输出 pr ...
- hdu4908 & BestCoder Round #3 BestCoder Sequence(组合数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 BestCoder Sequence Time Limit: 2000/1000 MS (Jav ...
- cocos2dx笔记1:概述
1.核心的类和功能 CCDirector gameLoop,实现场景绘制.多个场景之间切换控制.控制游戏的停止,暂停,等生命周期. CCScene 场景类,每一个场景能够理解为一个游戏镜头.状态 CC ...
- Win7下安装iMac系统
首先是灰常激动啊,一下午的努力最终在自己华硕的笔记本上安装了mac系统. 先上一个成果截图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXl4aGh4/ ...
- YTU 2895: H--唱歌的鸟儿
2895: H--唱歌的鸟儿 时间限制: 1 Sec 内存限制: 128 MB 提交: 26 解决: 10 题目描述 烟大东门有一棵大杨树,树上经常会有很多鸟儿飞来飞去.春天来了,学生物的小姜发现 ...
- iphone设备尺寸规格
1.以下是iphone各种设备的尺寸规格 2.开发时只需要按“逻辑分辨率”来,1x,2x,3x主要用于切图时按不同大小来切图,如1x的图就是按照“逻辑分辨率”大小的效果图切出来的原图,2x就是1x原图 ...
- git 一次删除所有删除的文件
/*********************************************************************************** * git 一次删除所有删除的 ...
- Windows7下安装golang语言开发环境和revel框架
1.下载先去下载32位或64 golang window 安装包 并安装下载地址:https://www.golangtc.com/download 本人更改了安装地址为 D:\GO\Go 2. go ...