sed是linux下非常常用的一款流编辑器(stream editor),主要以行为单位进行编辑,通常可以进行删除,替换,新增等操作,是linux运维中十分重要的工具。
一,sed的基本用法
sed [options] 'AddressCommand' file ...
-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接编辑原文件
-e script -e script: 可以同时执行多个脚本
-f /path/to/seg_script: 将sed命令写成脚本,直接调用脚本的sed命令执行
-r: 使用扩展正则表达式
sed默认不编辑原文件,仅仅对模式空间中的数据进行处理,而后,处理结束后,将模式空间打印输出到屏幕上
Address:
1: Startline,Endline
比如1,100,表示从第1行到第100行,$表示最后一行
# sed -n '1,5p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2:/RegExp/
支持正则表达式,/^root/ 表示以root开头的行
3:/pattern1/,/pattern2/
第一次被pattern1匹配的行开始,到最后被pattern2匹配的行结束,这中间的所有行
# sed -n '/^tmpfs/,/^proc/p' /etc/fstab
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
4: LineNumber
指定的行
5:StartLine, +N
从startline开始,向后的N行,(一共是N+1行)
# sed -n '2,+3p' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Command:
d: 删除符合条件的行
p: 显示符合条件的行
a \string: 在指定的行后面追加新行,内容为“string”
\n: 可以换行
i \string: 在指定行前面追加新行,内容为”string“
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将指定范围内的内容另存至指定的文件中
s/pattern/string/修饰符: 查找并替换,默认只替换每行中的第一次被模式匹配到的字符串
g: 全部替换
i: 忽略字符大小写
s### s@@@ 分隔符不仅限于///
实例:
1,修改网卡eth0配置文件中ONBOOT为yes
# sed -i 's@\(ONBOOT=\).*@\1yes@' /etc/sysconfig/network-scripts/ifcfg-eth0
2,替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5
# sed -i 's@\(id:\)[0-9]\(:initdefault:\)@\13\2@g' /etc/inittab
3,删除/etc/inittab文件中开头的#号
# sed 's/^#//g' /etc/inittab
4,删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
# sed -r 's@^[[:space:]]+#@@g' test.sh
5, 删除/etc/grub.conf文件中行首的空白字符
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf