sed命令--流编辑器
1.工作原理
指定一个文本文件,依次读取文本文件中每一行的内容,读取到模式空间(pattern space)中,在模式空间中进行文本匹配(使用正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改和保存)
2.常见选项
-r 指定使用扩展正则表达式
-n 禁止自动打印到空间模式
-e 接脚本语句
-f 指定脚本文件
-l 指定文本换行的长度
-i 直接修改文件内容(需要慎重使用)
3.地址定界
(1)直接匹配数值
示例:sed -n '5p' 文件名 #打印文件中内容的第五行
(2)d~ 步长
示例:sed -n '1~3p' 文件名 #打印文件中内容从第1行开始以3为步长打印,就是打印第1,4,7,11.....行
扩展:sed -n '1p;3p' 文件名 #打印文件内容中的第一行和第三行
(3)$ 指定行尾
示例:sed -n '10,$p' 文件名 #打印文件内容从第10行到最后一行
(4)/正则/
/正则1/,/正则2/
示例:sed -n '/k{5,}/,$p' 文件名 #打印文件中匹配k这个字符至少5次的字符并输出
(5)0,addr
addr 可以为 数字/$/正则表达式
示例:sed -n '0,/k{5,}/p' abc
(6)addr,+N
配置addr行到,addr后N行
示例:sed -n '/fd/,+5p' abc
4.常见命令
p print 打印(默认在屏幕上显示出来)建议和-n一起使用
i 在匹配的上一行去添加指定内容
示例:sed"/aaa/iabc" 文件
a 在匹配行的下一行指定添加内容
示例:sed"/aaa/aabc" 文件
c 替换行
示例:sed "/aaaa/c A"文件
d 删除
示例:sed "/aaa/d" 文件
sed "1,3d" 文件
n 读取/N添加 模式匹配到的行的下一行内容,在对其进行操作
w 保存文件内容到一个新的文件
示例:sed "/pattren/w 新文件" 原来文件
sed "/k/w /tmp/pattern" abc
s 文本内容替换,默认替换模式空间匹配到的第一项
语法格式:s/pattern/字符串/
中间/可以替换为任意一个特殊字符,例如:s###s%%%
g---行内全局替换
12 和正则表达式分组相同,实现反向应用;指定某一个匹配项进行修改替换
&---调用前面(pattern)匹配的内容
示例:sed "s/r..t/&er/g" 文件
5.练习
(1)删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
sed 's/^[[:space:]]+//g' /boot/grub/grub.conf
(2) 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行 的行首的#和空白字符;
sed 's/^#[[:space:]]+//g' /etc/fstab
(3)给定一个目录,取出其目录名
echo "/etc/passwd" | sed 's/[^/]+$//'
(4)给定一个目录,取出其文件名
echo "/etc/passwd" | sed 's#^/.*/(.*)##