sed:Stream EDitor(流编辑器)
行编辑器
sed:模式空间
默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕
sed基本用法
sed [options] 'AddressCommand' file... [Options]
-n 静默模式,不再默认显示模式空间中的内容
-i 直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file (让sed执行scripts中的编辑指令)
-r 表示使用扩展正则表达式
Address:
1、StartLine,EndLine
如:1,100
$:表示最后一行
2、/RegExp/
如:/^ROOT/
3、/pattern1/,/pattern2/
第一次被pattern匹配到的行开始,至第一次被pattern2匹配到的行结束,这和中间的所有行
4、LineNumber
指定的行
5、StartLine,+N
从StartLine开始,向后的N行
Command:
=: 显示行号
n: 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
d: 删除符合条件的行
p: 显示符合条件的行
a \string:在指定的行后面追加新行,内容为string
\n:可以用户换行
i \string:在指定的行的前面追加新行,内容为string
r FILE: 将指定的文件内容添加至符合条件的行处
w FILE:将指定的范围内的行另存至指定的文件中
s/pattern/string/修饰符(s///):查找并替换,默认只替换每行中的第一次被模式匹配带的字符串
修饰符:
g: 全局替换
i: 忽略字符大小写
s///:s###,s@@@
& 引用模式匹配到的整个字符串
用法示例:
删除/etc/grub.conf文件中行首的空白符
[root@localhost ~]# sed -r 's/^[[:space:]]+//g' /etc/grub.conf
替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
[root@localhost ~]# sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@' /etc/inittab
删除/etc/inittab文件中的空白行
[root@localhost ~]# sed '/^$/d' /etc/inittab
删除/etc/inittab文件中开头的#号
[root@localhost ~]# sed "s/^#//g" /etc/inittab
删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符
[root@localhost ~]# sed -r 's/^#[[:space:]]+//g' /etc/inittab
删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
[root@localhost ~]# sed -r 's/^[[:space:]]+#//g' /etc/inittab
取出一个文件路径的目录名称
[root@localhost ~]# echo '/etc/rc.d/' | sed -r 's@^(/.*/)[^/]+/?@\1@g'?
显示file1中空白行并显示行号
[root@localhost ~]# sed -n '/^$/{=;p}' file1.txt