sed命令简单总结

来源:互联网 发布:手机mv录制软件 编辑:程序博客网 时间:2024/05/22 17:44

今天看到sed命令,感觉有点小绕,在此总结下

前言

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。主要用来自动编辑一个或多个文件, 简化对文件的反复操作,编辑文本要用对工具会事半功倍。

用法

sed的用法格式

sed [option]... 'script' inputfile

常用选项

-n:不输出模式空间里的内容到标准输出,即不自动打印,但有时会需要自动打印,例如删除、插入后查看显示结果
-e:多点编辑,相当于执行与(&)命令
-f:/PATH/SEDFILE从指定文件读编辑脚本,实现批量修改
-r:支持扩展正则表达式
-i.bak:修改源文件后并把源文件做备份文件名为file.bak

script:

script用' 地址+命令 '表示
地址:
1. 不给地址:对全文进行修改,和后面的s:搜索替换命令范围区分开
2. 单地址:
#:指定的行
/pattern/:被模式匹配到的每一行,里面用正则表达式,用的挺多
3. 地址范围:
#,# 从第#行到第#行
#,+# 从第#行加#行
/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='66

!:模式空间中匹配的行取反处理

s///:查找替换,可能查找内容里也有/,所以还支持其他分隔符@#都可以

替换标记:

g:行内全局替换

p:显示替换成功的行,一般和 -n 一起用

w:/PATH/FILE:将替换成功的行保存至文件

[root@centos7 app]#seq 10 | sed -n 's/6/gg/pw file'


原创粉丝点击