sed 用法
sed [option]... 'script' inputfile ...
常用选项
- -n 关闭自动打印
- -e 多点编辑
- -f /PATH/SCRIPT 从指定文件中读取编辑脚本
- -r 支持使用扩展表达式
- -i.bak 备份文件并原处编辑
script
地址命令
地址定界
(1)不给地址:对全文进行处理
(2)单地址:
- #:指定的行,$: 最后一行
- /pattern/: 被此处模式所能够匹配到的每一行
(3)地址范围:
- #,# 第几行到第几行
- #,+# 第几行到后面的几行
- /pat1/, /pat2/ 正则表达式,可以搜索日志中几点几分到几点几分的日志内容
- 例如 sed -n '/^2020-02-29 03:23:34 /,/^2020-02-29 04:13:24/' xxx.log 举例就不一而足了
- #,/pat1/
(4)~:步进
- 1~2 奇数行 步进2
- 2~2偶数行 步进2
想不起来这个命令的适用场景,后面再补充吧
编辑命令
- d 删除模式空间匹配的行,并立即启用下一轮循环
- p 打印当前模式空间内容,并追加到默认输出之后
- a[\]text 在指定行后面追加文本,支持使用\n实现多行追加
- i[\]text 在行前面插入文本
- c[\]text 替换行为单行或多行文本
- w /path/file 保存模式匹配的行至指定文件
- r /path/file 读取指定文件的文本至模式空间中匹配到的行后
- = 为模式空间中的行打印行号
- ! 模式空间中匹配行取反处理
- s/// 查找替换,支持使用其它分隔符,s@@@, s###替换标记
- ——替换标记
- g 行内全局替换
- p 显示替换成功的行
- w /PATH/FILE
sed 示例 注意直接粘贴在shell窗口上会无法执行,是因为空格字符的问题
- cp /etc/passed passwd
- sed '2p' passwd 打印第二行,并且全部打印
- sed -n '2p' passwd 只打印第二行
- sed -n '1,4p' passwd 打印1-4行
- sed -n '/root/p' passwd 打印包含root的行
- sed -n '2,/root/p' passwd 从第二行开始,打印包含root的行
- sed -n '/^$/=' passwd 显示空行行号,ps (= 为模式空间中的行打印行号)
- sed 'root/a\superman' passwd 行后
- sed 'root/i\superman' passwd 行前
- sed 'root/c\superman' passwd 代替行
- sed '/^$/d' file 删除空格行
- sed '1,10d' file 删除1-10行
- nl passwd|sed '2,5d' 删除2-5行
- nl passwd|sed '2a tea' 在第二行新增一个tea(茶叶单词)
- sed 's/test/mytest/g' file 全局替换 test -> mytest
- sed -e 's/test/mytest/' 's/dog/cat/ ' pets 多点编辑
- sed -i.bak 's/test/mytest/g' file 替换前先生成一个备份文件file.bak
参考:http://www.gnu.org/software/sed/manual/html_node/Overview.html#Overview