Shell中sed使用
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
-i选项:直接作用源文件,源文件将被修改。
sed命令和选项:
| a\ | 在当前行后添加一行或多行 |
| c\ | 用新文本替换当前行中的文本 |
| d | 删除行 |
| i\ | 在当前行之前插入文本 |
| h | 把模式空间的内容复制到暂存缓冲区 |
| H | 把模式空间的内容添加到缓冲区 |
| g | 取出暂存缓冲区的内容,将其复制到模式缓冲区 |
| G | 取出暂存缓冲区的内容,将其追加到模式缓冲区 |
| l | 列出非打印字符 |
| p | 打印行 |
| n | 读入下一行输入,并从下一条而不是第一条命令对其处理 |
| q | 结束或退出sed |
| r | 从文件中读取输入行 |
| ! | 对所选行以外的行应用所有命令 |
| s | 用一个字符串替换另外一个字符串 |
替换标志:
| g | 在行内进行全局替换 |
| p | 打印行 |
| w | 将行写入文件 |
| x | 交换暂存缓冲区和模式空间的内容 |
| y | 将字符转换成另外一个字符 |
sed例子:
打印:p命令
| sed ‘/abc/p’ file |
打印file中包含abc的行。默认情况sed把所有行都打印到屏幕,如果某行匹配到模式,则把该行另外再打印一遍 |
| sed -n ‘/abc/p’ file | 和上面一样,只是去掉了sed的默认行为,只会打印匹配的行 |
删除:d命令
| sed ‘3,$d’ file | 删除从第3行到最后一行的内容。 |
| sed ‘$d’ file | 删除最后一行的内容 |
| sed ‘/abc/d’ | 删除包含abc的行。 |
| sed ‘3d’ file | 删除第三行的内容 |
替换:s命令
| sed ‘s/abc/def/g’ file | 把行内的所有abc替换成def,如果没有g,则只替换行内的第一个abc |
| sed -n ‘s/abc/def/p’ file | 只打印发生替换的那些行 |
| sed ‘s/abc/&def/’ file | 在所有的abc后面添加def(&表示匹配的内容) |
| sed -n ‘s/abc/def/gp’ file | 把所有的abc替换成def,并打印发生替换的那些行 |
| sed ‘s#abc#def#g’ file | 把所有的abc替换成def,跟在替换s后面的字符就是查找串和 替换串之间的分割字符,本例中试# |
指定行的范围:逗号
| sed -n ‘/abc/,/def/p’ file | 打印模式abc到def的行 |
| sed -n ‘5/,/def/p’ file | 打印从第五行到包含def行之间的行。 |
| sed /abd/,/def/s/aaa/bbb/g | 修改从模式abc到模式def之间的行,把aaa替换成def |
多重编辑-e
| sed -e ‘1,3d’ -e ‘s/abc/def/g’ file | 删除1-3行,然后把其余行的abc替换成def |
读文件:r命令
| sed ‘/abc/r newfile’ file | 在包含abc的行后读入newfile的内容 |
写文件:w命令
| sed ‘/abc/w newfile’ file | 在包含abc的行写入newfile |
追加:a命令
| sed ‘/abc/a\def’ file | 在包含abc的行后新起一行,写入def |
插入:i命令
| sed ‘/abc/i\def’ file | 在包含abc的行前新起一行,写入def |
修改:c命令
| sed ‘/abc/c\def’ file | 在包含abc的行替换成def,旧文本被覆盖 |
读取下一行:n命令
| sed ‘/abc/{n ; s/aaa/bbb/g;}’ file | 读取包含abc的行的下一行,替换aaa为bbb |
转换:y命令
| sed ‘y/abc/ABC’ file | 将a替换成A,b替换成B,c替换成C(正则表达式元字符不起作用) |
退出:q命令
| sed ‘/abc/{ s/aaa/bbb/ ;q; }’ file | 在某行包含了abc,把aaa替换成bbb,然后退出sed。 |
暂存和取用:h命令(把模式行存储到暂存缓冲区)和g(取出暂存缓冲区的行并覆盖模式缓冲区)G(取出临时缓冲区的行)命令
h和g是复制行为(覆盖),H和G表示追加。
| sed -e ‘/abc/h’ -e ‘$G’ file | 包含abc的行通过h命令保存到暂存缓冲区,在第二条命令汇中,sed读到最后一行$时,G命令从暂存缓冲区中读取一行,追加到模式缓冲区的后面。即所有包含abc的行的最后一行被复制到文件末尾。 |
| sed -e ‘/abc/{h; d;}’ -e ‘/def/{g; }’ file |
包含abc的行会移到包含def的行上,并进行覆盖。 |
暂存和互换:h和x命令
| sed -e ‘/abc/h’ -e ‘/def/x’ file |
包含abc的行会被换成def的行。 |
Shell中sed使用的更多相关文章
- shell中sed的简单使用
sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式.在一 ...
- shell中sed用法
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- python3-file的修改实现类似shell中sed的功能
# Auther: Aaron Fan '''思路:目的是为了修改yesterday这个文件,但是因为无法直接去修改这个文件,所以需要先把修改好的内容写入高yesterday.new这个文件中,然后再 ...
- shell中sed命令
sed -i '/cd ${LDIR_DEST}\/webextend\/pc && ln -s \/hard\/www_winclient\/bboxpc.exe ./a\ \tcd ...
- 在shell中使用sed命令替换/为\/
sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...
- linux下shell脚本中sed命令的用法
先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...
- linux中sed的用法【转】
sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式.在一般 sed 的 ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
- Makefile Shell 脚本;sed命令
1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \ //-d 判 ...
随机推荐
- Git 工具总结
初操作---设置用户名 git config --global user.name "any name" //设置全局project的用户名 git config --globa ...
- request.getParameterValues 出现 [Ljava.lang.String;@ 错误
在实现简单的本地登录系统时,需要把page1.jsp的表单显示在page2.jsp中. 其中获取page1.jsp表单的办法就是在页面1的<form>中加入action="pag ...
- 2018-2019-2 20165234 《网络对抗技术》 Exp2 后门原理与实践
实验二 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其 ...
- 基于YOLOv3和Qt5的车辆行人检测(C++版本)
概述 YOLOv3: 车辆行人检测算法 GitHub Qt5: 制作简单的GUI OpenCV:主要用于putText.drawRec等 Step YOLOv3检测结果 Fig 1. input im ...
- PyCharm的使用教程
1.1 安装 首先去下载最新的pycharm ,进行安装.可以直接在官网下载. 1.2 首次使用 1,点击Create New Project. 2, 输入项目名.路径.选择python解释器.如果没 ...
- 基于XML搭建SpringMVC项目
*如果你需要将应用部署到不支持Servlet3.0容器中 或者 你只是对web.xml情有独钟,那我们只能按照传统的方式,通过web.xml来配置SpringMVC. *搭建SpringMVC需要在w ...
- 20175315Mycp
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- loongson 2f 和u-boot中的cache命令对照
00000 Index Invalidate INDEX_INVALIDATE_I (I) 00001 Index WriteBack Invalidate INDEX_WRITEBACK_INV_D ...
- vertx的HttpServer模块
Start HttpServer /** * 启动 HttpServer * multi instances 采用 synchronized防止线程安全问题 * addHandlers 方法是acto ...