Sed,即Stream EDitor的缩写,是Linux操作系统中常见的文本处理工具,可以结合正则表达式简单方便地对文本进行处理。本文将以实例的方式介绍sed的基本用法。
基本使用方法
基本语法:sed [OPTION] [AddressCommand] FILE1 FILE2......
OPTION{常用}
-n:静默模式,不显示模式空间
-i:直接修改源文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /APATH/TO/SED_FILE:从文件中读取脚本,执行
-r:表示支持扩展正则表达式
Adress:
1.StartLine,Endline
如:1,100
2./RegExp/
/^root/:匹配以root开始的行
/$/:最后一行
3./pattern1/,/pattern2/:从第一次被模式1匹配到的行到第一次被模式2匹配到的行
4.LineNumber
指定的行
5.StartLine,+N
从StartLine开始,向后的N行
Command:
d:删除匹配到的行
例:删除/etc/fstab文件中的前三行文本
[root@localhost tmp]# sed ‘1,+2d‘ /etc/fstab
p:显示符合条件的行,被匹配到的行会显示两次,未被匹配到的行只显示一次
例:只显示/etc/fstab文件中以#开头的行
[root@localhost tmp]# sed -n ‘/^#/p‘ /etc/fstab
a \string 在匹配到的行后面增加行
例:在文件/etc/fstab文件中以#开头的行后面插入hahah这一行
[root@localhost tmp]# sed ‘/^#/a\hahaha‘ /etc/fstab
i \string 用法同a,在符合条件的行前面添加新行
r FILE后接文件,在匹配到的行后读入文件中的内容
例:在/etc/fstab文件中的第一行和第二行读入文件/etc/passwd
[root@localhost tmp]# sed ‘1,2r/etc/passwd‘ /etc/fstab
w FILE:将地址指定的范围内的行另存至指定的文件中
例:将温江/etc/fstab中的第一行和第二行保存到/tmp/fstab文件中
[root@localhost tmp]# sed ‘1,2w/tmp/fstab‘ /etc/fstab
s/pattern/string/[修饰符] :查找替换,默认只替换每行中第一次被模式匹配到的字符串
修饰符:
g:全局替换
i:忽略大小写
例:把文件test.txt中以o结尾的字符后面加d
[root@localhost tmp]# sed ‘s@\(o$\)@\1d@g‘ test.txt
例:去掉history命令的行首的所有空格
[root@localhost tmp]# history | sed ‘s@^[[:space:]]*@@g‘
综合实例
例1:删除/etc/grub.conf文件中行首的空白字符
[root@localhost tmp]# sed ‘s@^[[:space:]]*@@‘ /etc/grub.conf
例2:替换/etc/inittab文件中”id:3:initdefault:”一行中的数字为5
[root@localhost tmp]# sed ‘s/id:3:initdefault:\(.*\)/id:5:initdefault"\1/g‘ /etc/inittab
例3:删除/etc/inittab文件中的空白行
[root@localhost tmp]# sed ‘/^$/d‘ /etc/inittab
例4:删除/etc/inittab文件中开头的#号
[root@localhost tmp]# sed ‘s/^#//‘ /etc/inittab
例5:删除某文件中开头的#号但要求#号后面必须有空白字符
原文件内容如下
[root@localhost tmp]# sed ‘s/#*\([[:space:]]\+\)/\1/‘ test.txt
例6:删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#
例7:取出一个文件路径的目录名称
[root@localhost tmp]# echo "/etc/yum.repo/new.repo" | sed ‘s@/.*/\(.*\)/.*@\1@‘
本文出自 “linux-冒泡” 博客,请务必保留此出处http://7703592.blog.51cto.com/7693592/1651433
原文地址:http://7703592.blog.51cto.com/7693592/1651433