Linux Shell编程 sed命令
概述
sed 是一种几乎可以应用在所有 UNIX 平台(包括 Linux)上的轻量级流编辑器,体积小。所以,它可以对从如管道这样的标准输入中接收的数据进行编辑。
sed 主要是用来将数据进行选取、替换、删除、新増的命令。我们看看命令的语法:
[root@localhost ~] # sed [选项] '[动作]' 文件名
选项:
- -n:一般 sed 命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过 sed 命令处理的行输出到屏幕上;
- -e: 允许对输入数据应用多条 sed 命令编辑;
- -f 脚本文件名:从 sed 脚本中读入 sed 操作。和 awk 命令的 -f 选项非常类似;
- -r:在 sed 中支持扩展正则表达式;
- -i:用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;
- a \:追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
- c \:行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结;
- i \:插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
- d:删除,删除指定的行;
- p:打印,输出指定的行;
- s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和Vim中的替换格式类似);
sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。
sed命令示例
sed行数据操作示例
利用"p"动作查看student.txt 文件的第二行 。
[root@localhost ~]# sed '2p' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
"p"动作输出了第二行数据,但是 sed 命令还会把所有数据都输出一次。如果只想输出指定某行数据,则需要添加"-n"选项。
[root@localhost ~]# sed -n '2p' student.txt
1 Liming 82 95 86 87.66
删除从第二行到第四行的数据,文件本身并没有被修改
[root@localhost ~]#sed '2,4d' student.txt
ID Name PHP Linux MySQL Average
[root@localhost ~]# cat student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
sed命令中所有的动作必须使用"单引号"包含;在动作中可以使用数字代表行号,逗号代表连续的行范围。使用"$"代表最后一行,如果动作是"2,$d",则代表从第二行删除到最后一行。
在第二行后加入hello
[root@localhost ~]# sed '2a hello' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
hello
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
"a"动作会在指定行后追加数据。如果想要在指定行前插入数据,则需要使用"i"动作。
在第二行前插入两行数据
[root@localhost ~]# sed '2i hello > world' student.txt
ID Name PHP Linux MySQL Average
hello
world
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
如果想追加或插入多行数据,则除最后一行外,每行的末尾都要加入"\"代表数据未完结。
使用"-n"选项只查看sed命令操作的数据
[root@localhost ~]# sed -n'2i hello \
world' student.txt
hello
world
实现行数据替换
[root@localhost ~]# cat student.txt | sed '2c No such person'
ID Name PHP Linux MySQL Average
No such person
2 Sc 74 96 87 85.66
3 Gao 99 83 93 91.66
sed 命令在默认情况是不会修改文件内容的。如果我确定需要让 sed 命令直接处理文件的内容,则可以使用"-i"选项。可以使用这样的命令:
[root@localhost ~]# sed -i'2c No such person' student.txt
sed命令的字符串替换示例
"c"动作是进行整行替换的,如果仅仅想替换行中的部分数据,就要使用"s"动作了。"s"动作的格式如下:
[root@localhost ~]# sed's/旧字符串/新字符串/g' 文件名
在第三行中,把74换成99
[root@localhost ~]# sed '3s/74/99/g' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 99 96 87 85.66
3 Gao 99 83 93 91.66
如果想把某行的成绩注释掉,让它不再生效,则可以这样做:
[root@localhost ~]#sed '4s/^/#/g' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
#3 Gao 99 83 93 91.66
在这里使用正则表达式,"^"代表行首
不仅如此,我们还可以同时把"Liming"和"Gao"替换为空
[root@localhost ~]# sed -e 's/Liming//g; s/Gao//g' student.txt
ID Name PHP Linux MySQL Average
1 82 95 86 87.66
2 Sc 74 96 87 85.66
3 99 83 93 91.66
"-e"选项可以同时执行多个 sed 动作,多个动作之间要用";"或回车分隔,例如,上一条命令也可以这样写:
[root@localhost ~]# sed -e 's/Liming//g
> s/Gao//g' student.txt
ID Name PHP Linux MySQL Average
1 82 95 86 87.66
2 Sc 74 96 87 85.66
3 99 83 93 91.66
Linux Shell编程 sed命令的更多相关文章
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- Linux Shell编程 awk命令
概述 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是l ...
- Linux Shell编程 test命令
概述 test 命令是Shell 脚本中用来进行条件判断的. test命令示例 按照文件类型进行判断 测试选项 作 用 -b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) -c ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
随机推荐
- 配置LANMP环境(3)-- 安装anmp前准备与实用软件安装
一.安装配置vim 1.安装 yum -y install vim* 2.创建文件夹 mkdir -p /etc/vim/ 3.配置 vim ~/.vimrc "插入模式时 光标的上下左右 ...
- x264_param_t结构体解释,设置及对应函数位置
typedef struct x264_param_t { /* CPU 标志位 */ unsigned int cpu; int i_threads; /* 并行编码多帧 */ in ...
- 【转】如何彻底删除SVN中的文件和文件夹(附恢复方法)
这里假设SVN项目的目录为 /data/svn/project,我们想排除trunk/test.exe文件和trunk/notallowed/目录,操作步骤如下及执行的svn命令(在svn安装目录的b ...
- Java Web -- Servlet(1) 必备知识
学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...
- 解决OV系列摄像头寄存器读数据无法收到的问题
最近工作中接了一款OV7725的sensor,由于平台已经接过很多的家的sensor也就没有太当回事.问题出现的很奇怪,再看了 register map后基本确定了要尽心register R/W测试 ...
- 【转发】linux开发人员常用命令
每个开发人员到了他们职业人生的某个阶段的时候,将会发现自己要寻找有关Linux的信息.我并不是这方面的专家.但是掌握了以下8个命令,我几乎可以得到我任何需要的东西. 注意:以下的命令都有很多扩展的文档 ...
- 打印99乘法表-python
题目:如何打印出阶梯状的99乘法表? 题解: #coding:utf-8def multiplication_tables(num):#for i in range(1,10): for j in r ...
- php 正则匹配省市区
匹配指定前后内容中的值 如匹配/xxx-abc中的abc preg_match('/\/xxx-([^<]*)/i', $route, $matches); echo $matches[1]; ...
- Servlet注解
在Servle2.5能够使用注解 在web.xml的<web-app>标签下有一属性metadata-complete="true"在设置true时,Servlet中的 ...
- Android OpenCV图像转换
1.Mat存储到本地: public void saveMatData(Mat mat) { File fileDir = new File(Environment.getExternalStorag ...