sed是平时运维工作中较为常用的命令之一,周末时间整理下之前的笔记,并记录下来。sed是一个行文本编辑器,对纯ASCII码文本按行处理。sed在处理文本的时候,逐行将内容读取到内存中做处理,并将处理结果输出。这段内存空间称为“模式空间”,因为 sed并不一定每一行都处理,可以根据一定的模式匹配某些行进行处理。默认不修改源文件,仅对模式空间中的数据做处理。处理结束后将模式空间中的内容打印出来。
sed几个语法规则:
1、sed startline,endline file
从起始行到结束行,如1,100,从第一行到第100行
2、模式匹配行
sed /^root/ file 以root开头的行
3、/模式1/,/模式2/ 表示该文件第一次被模式1匹配到的行开始到第一次被模式2匹配到的行结束,这中间的所有行
4、只给一个数值,行号 表示精确指定特定的行
sed 100 file 精确处理第100行,$表示最后一行 sed $ file ,$-1表示倒数第二行
5、指定起始行,使用+N,表示从指定行开始,向后的N行,一共为N+1行内容
sed 2,+10 file
sed中常用的几个命令:
d:删除指定的行
从第一行开始,删除向后一行,一共删除两行
p:显示符合条件的行
下边的例子,符合条件的显示了两次,这是由于sed命令默认情况下还要将模式空间中的内容也显示出来,而p命令则是显示匹配到的行,所以一共显示了两行
-n 只显示符合条件的行:
a:用法 a \string---表示在指定的行后追加新行,内容为string
若要在匹配行后增加两行,string中\n换行即可
i \string:表示在指定的行前面添加新行,内容为string,\n换行
r filename: 将指定的文件的内容添加至符合条件的行处
在第二行后边添加另外一个文件的内容,/root/tt是另外一个文本文件路径
多行处理
w filename:将指定范围内的内容另存到指定的文件中
下边例子中/tmp/t2是文件路径
s : 查找并替换 s/匹配模式/要替换的内容/ 分隔符不仅限于/,可以是其他符合如s#匹配模式#要替换的内容#
默认是只替换每行中第一次匹配到的字符串
如果要每行中匹配到的所有字符串都被替换,需要使用下边两个参数:
g:全局替换
i:查找时忽略字符大小写
sed 中的后向引用:
&表示引用模式匹配的整个字符串
后向引用:
只引用匹配到的内容的一部分的时候,必须使用后向引用
如将匹配到的单词的l字符大写
Sed 默认不会修改源文件,如果需要对源文件直接做修改,使用-i选项即可.
-r :默认情况下sed只支持基本正则,-r使的sed可以使用扩展的正则表达式
如,删除文件中以空白字符后边加#开头的行中的开头的空白字符及#