sed命令:
用法:sed[选项]…{脚本命令}[输入文件]…
常用选项:
-i,--in-place 直接修改源文件;
-n 静默输出,屏蔽sed的自动打印;
-escript 允许多个脚本指令被执行;
-fscript-file 从文件中读取脚本指令;
--help 显示帮助文档;
脚本指令汇总:
指令 |
功能 |
指令 |
功能 |
s |
替换 |
d |
删除 |
a |
追加 |
i |
插入 |
c |
更改 |
l |
打印(显示非打印字符) |
y |
按字符转换 |
L |
打印(不显示非打印字符) |
p |
打印 |
r |
读入文件内容 |
w |
保存至文件 |
q |
退出 |
(1) 插入
sed ‘2a 在第2行后追加的内容’ test.txt
sed ‘3i 在第3行前追加的内容’ test.txt
sed “a\\$var1” test.txt #在每行后追加变量var1,注意双引号
(2) 删除
sed ‘3,4d’ test.txt #删除第3,4行
(3) 修改
sed‘s/被修改内容/修改内容/g’ test.txt
(4) 匹配
sed‘/example/a 匹配包含example的行后追加的内容’ test.txt
sed‘/^Begin/d’ test.txt #匹配Begin字符开始的行并删除
sed‘/^$/d’ test.txt #删除最后一行
(5) 脚本中的匹配替换
指令格式:[address]s/pattern/replacement/flags
address为操作地址,s为替换指令,/pattern/匹配需要替换的内容,/replacement/为替换的新内容。
Flags标记可以是:
n 1~512之间的数字,表示对指定模式的第n次出现进行替换;
g 对所有匹配进行全局更改;
p 打印内容;
& 用正则表达式匹配的内容进行替换
\ 转义
(5) 多行操作的实例
使用sed命令将编集前文件转化为编集后
[编集前] [编集后]
/var/log/glance/*.log { /var/log/glance/*.log {
daily rotate 240
rotate 10 missingok
missingok compress
compress nodateext
nodateext size 0
size 100M ifempty
maxage 10 maxage 10
} }
命令:
sed-e 's/daily/rotate 240/g' -e '3d' -e 's/size 100M/size 0/g' -e '7a\ ifempty' testlog
(testlog即为编集前文件)
修改多行的脚本内容
/^\/var/,/}/c\
/var/log/glance/*.log {\
rotate 240\
missingok\
compress\
nodateext\
size 0\
ifempty\
maxage 10\
}\
以上参考了<<Linux运维之道>>的部分内容,书中一些错误,在实际操作中可以被发现,另外推荐一些不错的网址用于查找sed的使用。
http://sed.sourceforge.net/sed1line_zh-CN.html
http://litaotao.blog.51cto.com/6224470/1288526