sed是Stream EDitor流编辑器的缩写,是GNU的软件项目,项目地址http://www.gnu.org/software/sed/ , 和grep,awk一起为视为linux下文字处理三大神器。
sed的工作原理:简单的讲就是读取一行到内存,处理完再读取下一行,一直到最后一行。
稍微详细一点讲就是读取一行放到模式空间(sed在内存申请的一段内存空间),被模式匹配到则按给定的Action处理,处理完则继续读入下一行,如果没有被模式匹配到则直接继续进入下一步。如果没有给模式则默认是空模式,处理所有的行。
上列子:
- sed ‘/^#/p‘ /etc/fstab 把/etc/fstab文件中#开头的行打印到屏幕
- 选项要放在单引号里,/这里面是模式,支持正则表达式/,p是动作action,表示打印,可以看到这样的话#开头的行会在屏幕上打印两遍,这是因为默认会把模式空间的内容输出到屏幕,可以加-n参数(--quiet | --slient)静默模式,就不会把没被模式匹配到的打印出来了。
- sed -n ‘/^#/!p‘ /etc/fstab -n 静默输出,!取反,#开头的行不打印,模式里面不支持取反
- sed -n ‘/bash$/=‘ /etc/passwd =也是命令,打印匹配到的行的行号
- sed -n ‘1,3p;8,/^mail/p;/^tcpdump/,/^bob/p‘ /etc/passwd
sed的地址定界符,打印第1到3行;从第8行开始到第一次匹配到mail开头的行结束;从第一次匹配到tcpdump开头的行开始,到第一次匹配到bob开头的行结束。各个命令段之间用分号分隔。
Tips:如果后面还有tcpdump开头的行则继续往后匹配,直到再次匹配到bob开头的行,如果没有则到最后一行
5. sed ‘/CentOS/a \sed‘ /etc/issue 在CentOS后面的一行加上一段文字,i则是在前面一行,c是将匹配到的内容直接替换成反斜杠后面的文字。
6. which ls | sed ‘/^alias/d;s/[[:space:]]//g‘ 获取ls命令的路径,s同vim中的查找替换命令使用方法一样,把空格全部换成什么都没有
7.
[[email protected] ~]# cat << EOF >> lier > Whom lione is a lioner. > Jerry > Tom > EOF [[email protected] ~]# sed -n ‘/\(l..n\).*\1r/p‘ lier # 正则表达式 Whom lion is a lionr. [[email protected] ~]# sed -rn ‘/(l..n).*\1r/p‘ lier # -r 使用扩展的正则表达式 Whom lion is a lionr. [[email protected] ~]# sed -i.bak ‘s/lion/lie/g‘ lier # -i | --in-place把模式空间内容写入 # 原文件,i后面可以加上后缀,则会在覆盖原文件前先生成一个以原文件名+后缀为文件名的副本 [[email protected] ~]# ls lie* lier lier.bak [[email protected] ~]# cat lier.bak Whom lion is a lionr. Jerry Tom [[email protected] ~]# cat lier Whom lie is a lier. Jerry Tom
8.
[[email protected] ~]# sed ‘3r /etc/issue‘ /etc/fstab # 在第三行后面读取/etc/issue文件 # # /etc/fstab CentOS release 6.2 (Final) Kernel \r on an \m # Created by anaconda on Fri Dec 21 19:29:44 2012 # # Accessible filesystems, by reference, are maintained under ‘/dev/disk‘ # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=c35f26c4-3870-4122-b32f-99d177987eae /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sdb1 /bak ext4 defaults 1 2 [[email protected] ~]# sed -n ‘/^\/dev/w /root/fstab‘ /etc/fstab # 把模式到的内容写入到/root/fstab文件中 [[email protected] ~]# cat fstab /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 /dev/sdb1 /bak ext4 defaults 1 2 [[email protected] ~]#
时间: 2024-11-10 13:03:40