sed
来源:互联网 发布:大数据项目方案 编辑:程序博客网 时间:2024/05/18 03:47
sed是作为特殊目的的编辑器而创建的,专门用于执行脚本;与ed不同,它不能交互的使用。
sed与ed的主要区别在于它是面向字符流的。默认情况下,到sed的所有输入都会经过相应的处理,并转为标准输出。
输入文件本身不发生改变。如果想改变输入文件,可以在编辑工作满意后,用修改后的版本代替最初的文件。
ed不是面向字符流的,并且文件本身会发生改变。ed脚本必须包含保存文件并退出编辑器的命令。它不产生到达屏幕的输出,但由特殊命令生成的东西除外。
如果有多条命令或者使用脚本时,文本中每个输入行,会经过多条命令逐一处理后输出;而不是整个文本经过一条命令处理后,再由下一条命令处理。
基本使用
1. 如何指定命令行上的多重指令
用分号分隔指令
sed ‘s/ VA/, Massachusetts/;s/ PA/, Massachusetts/’ list
在每个指令前放置-e
sed -e ‘s/ VA/, Massachusetts/’ -e ‘s/ PA/, Massachusetts/’ list
2. sed使用脚本文件
sed -f scripitfile file
注:可使用重定向(>),将输出内容保存到新的文件中
3. 只输出受影响的行
sed -n -e 's/regular/replacement/p' file注:必须要加p,用来输出受影响的行
参数:
-e 编辑随后的指令
-f 跟随脚本的文件名
-n 阻止输入行的自动输出
替换
替换命令的语法如下:
[address] s/pattern/replacement/flags
address必须使用斜杠”/”作为定界符。指定address时,sed只会对为满足address的输入行进行处理;否则,对pattern匹配的输入行进行处理。
replacement中需注意:
1. & 在replacement中使用&,表示引用匹配的内容2. \n 表示在pattern中使用"\("和"\)"匹配的子串
flags有下列几种:
n 模式中第n次出现的内容才进行替换g 对模式空间所有出现的内容进行替换。不指定时默认替换第一个匹配内容p 将匹配并且处理后的内容输出w 将匹配并且处理后的内容写入文件
注: flags指定w的使用
sed -n '/haha/ s/ha/wowo/gw list1' list
将处理后的内容输出到list1中
删除
sed删除的语法如下:
sed /pattern/d file
需要注意两点:
1. 如果某行匹配了,就会删除整行;
2. 一旦执行了删除命令,后面的命令就不会执行了,重新读入新的行。