sed:linux中的流编辑器,全名stream editor.与awk,vim并称linux的三大处理器。将文本内容放到内存中,处理之后在显示出来。
语法:sed [option] 'addresscommand' 操作对象
对语法的解释:
1.address:
1)startline,endline 从startline开始到endline结束。 ---->'1,20'
2)使用正则表达式 ------->/^root/
/模式1/,/模式2/ --------->从第一次被模式1匹配到的行开始到第一此被模式2行匹配到的行结束
3)linenum ---------->指定特定的行,$表示最后一行
4)startline,+N ----------->从startline行开始,往后N行
2.command
1) d 删除符合条件的行
2) p 显示符合条件的行 -------->如果不加-n,匹配的行会显示两次
3) a \string 在指定的行后面添加内容
4) i \string 在指定行前面添加内容
5) r 文件名 将文件内容添加到指定行的位置
6) w 文件名 将指定内容另存为文件名
7) s 查找替换,s/pattern/string/[g/i]
默认按情况下只匹配每行的第一个匹配到的进行替换或者修改,g全局替换查找,i忽略大小写
8) 分组:将文中的love变成lover,将like变成liker
sed ‘s#l..e#&r#g 文件名 或者 sed ‘s#\(l..e\)#\1r#g
3.option----->该选项可以省略。
1) -n 静默模式,只显示匹配到的内容
2) -i 直接修改源文件(操作需谨慎)
3) -r 支持扩展正则表达式
eg:删除文件中以空格开始后面有#的这些字符: sed -r 's/^[[:space:]]+#//' /etc/inittab
实例sed:
取出一个文件路径的目录名称:
echo '/etc/systemd/network/' | sed -r 's@^(/.*/)[^/]+/?@\1@g'
取出文件路径中基名:
echo '/etc/systemd/network/' | sed -r 's@^/.*/([^/]+)/?@\1@g'