@wyjgd
2019-09-01T14:00:27.000000Z
字数 1282
阅读 631
Stream EDitor 行编辑器
sed是一种流编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区,称为模式空间,接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容显示在屏幕。然后读入下行,执行下一个循环。
功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写程序等。
sed [option] 'script' inputfile
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e:多点编辑
-f:从指定文件中读取编辑脚本
-r:支持扩展正则
-i.bak:备份文件并原处编辑
-i:对文件进行修改保存
script:地址命令
编辑命令:
d:删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a[\]text:在指定行后面追加文本,支持\n实现多行追加
i[\]text:在行前面插入文本
c[\]text:替换行为单行或多行文本
w /path/file:保存模式匹配的行至指定文件
r /path/file:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反
地址定界:
不给地址:对全文进行处理
sed '' /etc/passwd 显示passwd文件内的内容
单地址:
#:指定的行(sed -n '2p' f1)
$:最后一行
sed -n '2p' /etc/passwd 第二行
sed -n '$p' /etc/passwd 最后一行
sed -n '/^U/p' /etc/fstab 查找U开头的行
地址范围:
#,#
#,+#
/part1/,/part2/
#,/part1/
seq 1 10 |sed -n '3,6p'
3 4 5 6
seq 1 10|sed -n '3,+6p'
3 4 5 6 7 8 9
sed -n '/^tcp/,/^test/p' /etc/passwd 以tcp开头的行到以test开头行为止
~:步进
1~2 奇数行
2~2 偶数行
替换:
s///:查找替换,支持使用其他分隔符,如s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /path/file 将替换成功的行保存至文件中
统计/etc/inint.d/functions文件中每个单词的出现次数,并排序(grep和sed两种方法)
egrep -o "[[:alpha:]]+" /etc/init.d/functions|sort|uniq -c|sort -n >f1
sed -r 's/[^[:alpha:]]/\n/g' /etc/init.d/funcitons |sed '/^$/d'|sort|uniq -c|sort -n >f2
diff f1 f2
![image.png-2.6kB][2]
利用sed取出ifconfig命令中本机的ipv4地址
ifconfig eth0|sed -r '2!d;s/.*et (addr:)?//g;s/ .*//g'
删除centos7中/etc/grub2.cfg文件所有以空白开头的行行首的空白字符
sed -r 's/^([[:space:]]*)//g' /etc/grub2.cfg