今天看到sed命令,感觉有点小绕,在此总结下
前言
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。主要用来自动编辑一个或多个文件, 简化对文件的反复操作,编辑文本要用对工具会事半功倍。
用法
sed的用法格式
sed [option]... 'script' inputfile
常用选项
-n:不输出模式空间里的内容到标准输出,即不自动打印,但有时会需要自动打印,例如删除、插入后查看显示结果
-e:多点编辑,相当于执行与(&)命令
-f:/PATH/SEDFILE从指定文件读编辑脚本,实现批量修改
-r:支持扩展正则表达式
-i.bak:修改源文件后并把源文件做备份文件名为file.bak
script:
script用' 地址+命令 '表示
地址:
1. 不给地址:对全文进行修改,和后面的s:搜索替换命令范围区分开
2. 单地址:
3. 地址范围:#:指定的行/pattern/:被模式匹配到的每一行,里面用正则表达式,用的挺多
#,# 从第#行到第#行#,+# 从第#行加#行/part1/,/part2/ 被part1匹配到的行到被part2 匹配到的行#,/part1/ 从第#行到被part1匹配到的行注:这些可以混合使用,比较灵活4. ~:步进
1~2 奇数行,从第一行开始每两行包括第一行
2~2 偶数行,从第二行开始每两行包括第二行
命令:
d:删除模式空间匹配的行,再进行下一轮循环,是删除整行!
p:打印当前模式空间的内容,追加到默认输出,当不加-n选项是会打印两遍
a[\]text:在指定行后追加内容(整行),支持用\n多行追加,但要记得加引号(单双一样),\只是表示分隔,用来识别命令和追加的文本的
seq 10 | sed "2i\gg\nGG"
i[\]text:在指定行前面插入文本(整行),支持用\n多行追加,但要记得加引号(单双一样),\只是表示分隔,用来识别命令和追加的文本的
c[\]text:替换指定行,支持用\n多行替换一行或多行。
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号(=跟在模式匹配后面,但是要和其他命令分开用),
[root@centos7 app]#seq 10 | sed -n -e '6p' -e '6=' 6 6
!:模式空间中匹配的行取反处理
s///:查找替换,可能查找内容里也有/,所以还支持其他分隔符@#都可以
替换标记:
g:行内全局替换
p:显示替换成功的行,一般和 -n 一起用
w:/PATH/FILE:将替换成功的行保存至文件
[root@centos7 app]#seq 10 | sed -n 's/6/gg/pw file'