sed详解---基础篇
来源:互联网 发布:交友聊天软件 编辑:程序博客网 时间:2024/06/04 01:18
- 前言
- sed命令行的基本格式
- 打印匹配行
- 删除匹配行
- 替换匹配行中第一次匹配的的字符串
- 替换匹配行中所有匹配的字符串
- 修改原文件选项
- 定址功能
- 命令和选项
- 退出状态
- 思考题
前言
sed意为流编辑器(Stream Editor),常用于在Shell脚本和Makefile中作为过滤器使用,也就是把前一个程序的输出引入到sed输入,经过一系列编辑命令转换为另一种格式输出,sed和vi都源于早起UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的
sed命令行的基本格式
sed option ‘script’ file1 file2 …
sed option -f script file file1 file2
sed处理的文件既可以由标准输出重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理,sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件,用-f参数指定,编辑命令的格式为:
/pattern/action
其中pattern是正则表达式,action是编辑操作,sed一行一行读出待处理文件,如果某一行与pattern相匹配,则执行相应的acation,如果一条命令没有pattern只有action,这个action将作用于待处理文件的每一行。
sed是一种在线编辑器,它一次处理一行内容,处理时把当前处理行放在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,将缓冲区内容送往屏幕,接着处理下一行,不断重复直到文件末尾,文件内容本身并不改变,除非你用重定向存储输出,总的来说,sed主要用于自动编辑一个或多个文件,简化对文件的反复操作
打印匹配行
/pattern/p
使用p命令需要注意,sed是把待处理文件连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来还额外打印一遍匹配pattern的行,例如下图:
如果要只得到处理结果,应当加上-n选项
删除匹配行
/pattern/d
注意,sed不会修改原文件,删除命令只表示某些航不打印输出,而不是从原文件删去
替换匹配行中第一次匹配的的字符串
/pattern/s/pattern1/pattern2/
查找匹配pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
替换匹配行中所有匹配的字符串
/pattern/s/pattern1/pattern2/g
查找匹配pattern的行,并把该行所有匹配pattern1的字符串替换为pattern2
例如下图:
还有下面这种用法
这里pattern2中的& 表示当前行中与pattern1匹配的字符串
再比如下面这种用法:
这里pattern2中的\1表示的是pattern1中第一个()中匹配的内容
修改原文件选项
sed -i
定址功能
定址用于决定对哪些行进行编辑,地址的形式可以使数字,正则表达式,或者没有指定地址,sed将处理文件的所有行
- 打印第三行:sed -n ‘3p’ file
- 打印100~300行(包括100和100):sed -n ‘100,300p’ file
地址是逗号分隔的,那么需要处理的地址就是这两行之间的范围,范围可以用数字,正则表达式,或者二者的组合表示
举例如下:
sed ‘2,5d’ file #删除第二行到第五行
sed ‘/start/ ,/end/d’ file #删除包含“start”行到“end”行之间的行
sed ‘/start/,10d’ file #删除包含‘start’行到第十行的内容输出偶数行与奇数行
命令和选项
sed命令告诉sed如何处理由地址输入的各输入行如果没有指定地址就处理所有的行
a:在当前行后添加一行或多行,多行时除最后一行外,每行末尾需要“\”续行
c:用此付好后的新文本替换当前行的文本,多行时除最后一行每行末尾用”\”续行
i:在当前行之前插入文本
h:把模式空间里的内容复制到暂存缓冲区
g:把暂存缓冲区里的内容复制到模式空间,覆盖原有内容
G:把暂存缓冲区的内容追加到模式空间,追加在原有内容后面
l:列出非打印字符
p:打印行
q:结束或退出sed
r:从文件中读取行
!:对所行以外所有行应用命令
s:用一个字符串替换另一个
g:在行内进行全局替换
w:将所选的行写入文件
x:交换暂存缓冲区与模式空间内容
y: 将字符替换为另一字符(不能对正则表达式用y命令)
选项
-e:进行多项编辑,即对输入行应用多条sed命令时使用
-n:取消默认输出
-f:指定sed脚本的文件名
退出状态
sed和grep不一样,不管是否找到指定的模式,退出状态都是0,只有在命令本身出现错误时候,sed的推出状态才不是0.
思考题
1.练习以上所有用法
2.如何用seq和sed输出1到100的累加和?(提示:还要用到bc)
- sed详解---基础篇
- linux之sed基础命令详解
- Linux基础之sed流编辑器详解
- sed基础
- sed基础
- sed基础
- Sed详解
- Sed详解
- sed详解
- sed详解
- sed 详解
- sed详解
- sed详解
- sed详解
- Sed详解
- sed详解
- sed 详解
- sed详解
- 阿里云linux服务器下安装Apache的简单方法
- 实时分析系统以及hbase、hive和impala的区别
- JavaScript之DOM事件模型
- LeetCode部分题解
- Java基本数据类型及其封装器的一些千丝万缕的纠葛
- sed详解---基础篇
- [LeetCode] 86. Partition List
- logicTrace小游戏
- (1)Air Band调研
- [Haskell on HackerEarth] Monk and Digital World
- ssh无法连上虚拟机中linux
- nyoj 927 The partial sum problem
- 深度学习实践经验:用Faster R-CNN训练Caltech数据集——训练检测
- 二叉树的创建与遍历