Sed:流编辑器
使用模式空间做匹配,将文件读取到模式空间,根据给的模式做匹配,匹配到则根据给的sed命令做处理,不匹配则丢弃,sed默认不修改源文件,只对模式空间中的文件数据做处理,并打印到屏幕上。sed支持正则表达式,默认使用基本正则表达式。
以下是常用方法介绍
一个文件做演示
Sed基本用法:
Sed [options] ‘AddressCommand’ file ……
Options:
-n:静默模式,不再默认匹配显示模式空间中的内容
-i:直接修改原文件,建议不使用,除非你真地有把握
d在后面有说明,删除匹配到的字符
-i还有一个特殊的用法,及时改了源文件也有备份的
-i.bak :修改前先复制一份源文件,.bak自己定义,修改完成后会多出一个以.bak结尾的备份文件。你也可以写成.txt。
-e script -e script:可以同时执行多个脚本对文件进行处理
-r:使用扩展正则表达式,这个就不用演示了吧
** Address:
1、 startline,endline
例:1,100**
$:表示最后一行
2、/regexp/:正则表达式
**3、/pattern1/,/pattern2/:**第一次被pattern1匹配到的行开始,至到第一次被pattern2匹配到的行结束,这中间的所有行
4、linenumber:指定的行
**5,、startline +N :从startline开始,向后的N+1行 **
Command段:
d:删除符合条件的行
p:打印符合条件的行
你会发现为什么每行都会重复的显示,因为sed的默认动作就是显示到屏幕,而我们有指定p,又打印一次,所以就是看到的重复行,空行都不放过哦。
-n和p常组合使用,之打印输出匹配到的行
a \string:在指定的行后面追加新行,内容为string,不指定则全文见追加新行
i \string:在指定的行前面追加新行,内容为string
w file:将符合条件的行保存至指定的文件中
r file:将指定的文件内容添加到符合条件的行处。
s/pattern/string/修饰符:查找并替换,默认只替换每行中的第一个被模式匹配到的字符串,s///,s###,s@@@:替换与之不同字符串时不需要转义,例如匹配/时替换为#,用s@/@#@g,不需要转义符。
修饰符:** g**:全局替换,被匹配到的都替换;i:忽略字符大小写 ;
用与之不同的字符串匹配则不需要转移符
**():使用正则表达式的分组,取值\1,\2,\3,**使用-r 选项用扩展正则表达式,centos7用的获取IP地址的方法!
&:引用模式匹配到的模式
看一下是不是所有匹配到#开头的后面都添加了//字符!
希望可以帮助到大家,谢谢!!!