文本处理三剑客之sed用法大全

1、sed

sed 英文stream Editor sed是 行编辑器 与vi不一样。工作原理如图下
sed工作原理
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。
每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
与vim比sed的优势就是一行一行进行读取,处理大文件也不会出现卡顿,vi则是一次性读取到内存中,进行处理,性能利用率较高
sed资料参考网站

2、sed基本用法

sed [option]… ’ script ’ [input-file]…

2.1、[option]

-n 不输出模式空间内容到屏幕,即不自动打印,默认全部输出(重要)
-e 多点编辑
-f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式(重要)
-i.bak 备份文件并原处编辑,其中.bak可写可不写

2.2、script格式

‘地址命令’ 也就是地址加上命令的组合形成一个script

地址格式:

①. 不给地址:对全文进行处理
② 单地址
#:指定的行,
$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
③ 地址范围:
#,#
#,+#
/patttern1/,/pattern2/
#,/pattern/
④步进:~
1~2 奇数行
2~2 偶数行

命令

p 打印当前模式空间内容,追加到默认输出之后
d 删除模式空间匹配的行,并立即启用下一轮循环
a text 在指定行后面追加文本,支持使用\n实现多行追加
i text 在行前面插入文本
c text 替换行为单行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中

3、命令范例

标准输入
在这里插入图片描述
输出/etc/issue中的内容,-n关闭全部打印功能,p是显示匹配到的内容
在这里插入图片描述
显示root用户信息
在这里插入图片描述
显示eth0网卡的IP地址信息行
在这里插入图片描述
显示对应的行区间:
在这里插入图片描述
多点编辑
在这里插入图片描述
删除对应行并进行备份
在这里插入图片描述
在第一行后边追加123
在这里插入图片描述
取基名和取目录名
在这里插入图片描述

4、sed 高级用法

sed 中除了模式空间,还另外还支持保持空间(Hold Space),利用此空间,可以将模式空间中的数
据,临时保存至保持空间,从而后续接着处理,实现更为强大的功能。
常见的高级命令
P 打印模式空间开端至\n内容,并追加到默认输出之前
h 把模式空间中的内容覆盖至保持空间中
H 把模式空间中的内容追加至保持空间中
g 从保持空间取出数据覆盖至模式空间
G 从保持空间取出内容追加至模式空间
x 把模式空间中的内容与保持空间中的内容进行互换
n 读取匹配到的行的下一行覆盖至模式空间
N 读取匹配到的行的下一行追加至模式空间
d 删除模式空间中的行
D 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输
入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样
启动正常的新循环

案例:将文本文件的n和n+1行合并为一行,n为奇数行
在这里插入图片描述

发布了12 篇原创文章 · 获赞 0 · 访问量 414

猜你喜欢

转载自blog.csdn.net/swyer_66/article/details/103745826