sed命令的基本使用
sed(Stream Editor):流编辑器
一次只读取一行
模式空间
1、sed语法:
sed [option] "script" FILE...
2、选项:
-n:静默模式,不输出模式空间中的内容
-r:使用扩展的正则表达式
-f:/path/to/sed_script_file:指定sed脚本文件
-e 'script' -e 'script' :指定多个编辑脚本
-i:直接修改读取的文件内容,而不是输出到终端
3、编辑命令:
d:删除
p:打印
i \text:匹配内容上面增加text内容
a \text:匹配内容西面增加text内容
r /path/to/somefile:在制定位置把另外一个文件的内容插入进来
w /path/to/somefile:将符合条件的所有行保存至指定得文件中
= :显示符合条件行的行号
例如:# sed -n '/^UUID/=' /etc/fstab
s///:查找条件可以使用模式,但要替换的内容不行
4、地址定界:
startline,endline:1,3
/pat1/,/pat2/
/pattern/
用法:
sed [options] 'addr1[,addr2]编辑命令' FILE ...
sed [options] "addr1[,addr2]编辑命令" FILE ...
5、正则表达式:
基本的:
字符:
.
[]
[^]
次数:
*
\?
\{m,n\}
锚定:
^
$
\<,\b
\>,\b
分组:
\(\)
引用:
\1,\2,...
扩展:
字符:
.
[]
[[:lower:]],[[:punct:]],[[:alnum:]]
次数:
*
?
+
{m,n}
锚定:
^
$
\>,\b
\<,\b
或:
a|b
分组:
()
引用:
\1,\2,...
sed '地址定界s@查找条件@替换文本@'
6、修饰符:
g:global,全局替换
i:ignore-case,不区分字符大小写
7、例子:
1、将selinux的enforcing改成disabled
# sed 's@^SELINUX=enforcing@SELINUX=disabled@g' /etc/selinux/config
2、删除/etc/init.d/functions文件中的空白行
# sed '/^$/d' /etc/init.d/functions
3、删除/etc/inittab文件中位于行首的#号
# sed 's@^#@@g' /etc/inittab
4、删除/etc/rc.d/rc.sysinit文件夹中以#后跟至少一个空白字符开头的行的行首的#和空白字符
# sed 's@^#[[:space:]]\{1,\}@@g' /etc/rc.d/rc.sysinit
5、删除/boot/grub/grub.conf文件中行首的空白字符
# sed 's@^[[:space:]]\{1,\}@@' /boot/grub/grub.conf
6、取出一个文件路径的目录名称
# echo /etc/sysconfig/network/ | sed 's@[^/]\{1,\}/\?$@@'
7、按时间截取日志
sed -n '/2017:03/,/2017:04/p' www.fansik.cn_access.log-20170611 > 20170610-03-04