1.sed介绍
stream editor,行编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,然后读入下行,执行下一个循环。如果没有诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向输出功能
功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
2.sed用法
用法:sed [option]... 'scripts' inputfile
常用选项
-n:不输出模式空间内容到屏幕上,即不自动打印
-e:多点编辑
-r:支持使用扩展正则表达式(默认使用基本正则表达式)
-f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-i.bak:备份文件并原处编辑(先生成一个.bak的备份文件,然后再进行编辑)
scripts
'地址+命令'
地址定界:
(1):不给地址:对全文进行处理
(2):单地址
#:指定的行,$:最后一行
/pattern/:被此处模式所能匹配到的每一行
(3):地址范围
#,#
#,+#
/par1/,pat2/:
#,/pat1/
(4):步进
1~2:奇数行
2~2:偶数行
编辑命令
d:删除模式空间匹配的行,并启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
a[]text:在指定行后面追加文本
支持使用 实现多行追加
i[]text:在行前面插入文本
c[]text:替换行为单行或多行文本
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中,放到匹配到的行后
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g:行内全局替换
p:显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
sed示例:
取ip地址:ifconfig eno16777736|sed -r '2!d;s@.*inet (.*)net.*@1@'
sed '2p' /etc/passwd
sed -n '2p' /etc/passwd
sed -n '1,4p' /etc/passwd
sed -n '/root/p' /etc/passwd
sed -n '2,/root/p' /etc/passwd
sed -n '/^$/=' file
sed -n -e '/^$/p' -e '/^$/=' file
sed '/root/asuperman' /etc/passwd
sed '/root/isuperman' /etc/passwd
sed '/root/csuperman' /etc/passwd
sed '/^$/d' file
sed '1,10d' file
nl /etc/passwd|sed '2,5d'
nl /etc/passwd|sed '2a ea'
sed 's/test/mytest/g' sed.txt
sed -n 's/root/&superman/p' /etc/passwd
sed -n 's/root/superman&/p' /etc/passwd
sed -i.bak 's/test/mytest/g' sed.txt
3.sed高级用法