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. 一旦执行了删除命令,后面的命令就不会执行了,重新读入新的行。

0 0
原创粉丝点击