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