linux中sed简析

Sed
sed 是一种在线的非交互式的编辑器,他一次只处理一行内容,处理时把当前处理的行存储在临时缓冲区中称为模式空间(pattern space) 然后用sed命令处理缓冲区中的内容,处理完成后把缓冲区的内容,送往屏幕,处理完成后 继续处理下一行 文件内容不会发生变化

sed格式
sed 选项 命令 文件
sed 选项 -f 脚本 文件
sed 的返回值一直为0 ,当语法错误时返回非0
sed中使用正则表达式 sed在文件中查找模式时可以使用正则标表达式(RE)和各种元字符。
写在斜杠间的模式用于查找和替换,支持基本元字符有^, $, ., *, [], [^], <, >,(),{}
支持的扩展元字符集有 ? , +. |, (),
在sed中使用扩展元字符需要+转义或者使用sed -r参数 识别元字符

sed命令
d 删除命令 sed -r ‘3d’ passwd 删除第三行
s 替换命令 sed -r ‘s/root/aaaa/’ passwd 找到root替换为aaaa 最后加g表示全局替换 默认只替换一行的第一个匹配对象
c替换整行命令 sed -r ‘2ccccccccc’ passwd 把passwd文件中的第二行替换为ccccccccc
r 读文件命令 sed -r ‘KaTeX parse error: Undefined control sequence: \在 at position 216: …一行123 想输入多行可以输入\̲在̲进行回车换行 就会被转义 继续…!d’ passwd 这里取反是对前面的范围进行取反 这里表示删除除了三行到末行的内容 就是删除1和2行
e 多重编辑 sed -r -e‘1,2d’ -e’3s/adm/admin/g’ passwd 表示删除1和2行并对第三行全局替换adm替换为admin

暂存空间 hHgGx
hold space 暂存空间
pattern space 模式空间
h 覆盖暂存空间
H 追加暂存空间
g 覆盖行
G 追加行
暂存空间 hHgGx例子
Sed -r ‘g’ passwd 把 hold space中的内容覆盖至pattern space中 输出屏幕 因为holdspace中没有内容 所以覆盖了空白内容
Sed -r ‘G’ passwd 从暂存空间追加到模式空间 屏幕上显示出现每行原内容后有一行空白
Sed -r ‘1h, G ’ p a s s w d 第 一 行 覆 盖 到 暂 存 空 间 再 从 暂 存 空 间 追 加 到 最 后 一 行 , 等 于 第 一 行 在 暂 存 空 间 中 兜 了 一 圈 回 到 了 最 后 一 行 S e d − r ‘ 1 h ; 2 G ; 3 G ; G’ passwd 第一行覆盖到暂存空间 再从暂存空间追加到最后一行,等于第一行在暂存空间中兜了一圈 回到了最后一行 Sed -r ‘1h;2G;3G; GpasswdSedr1h;2G;3G;G’ passwd 将第一行覆盖到暂存空间 并追加到2、3、尾行后
Sed -r ‘1{h;d}; G ’ p a s s w d 将 第 一 行 覆 盖 到 暂 存 空 间 在 模 式 空 间 中 删 除 第 一 行 , 将 暂 存 空 间 中 的 内 容 ( 第 一 行 ) 追 加 到 最 后 一 行 S e d − r ‘ 1 h ; 2 , G’ passwd 将第一行覆盖到暂存空间在模式空间中删除第一行,将暂存空间中的内容(第一行) 追加到最后一行 Sed -r ‘1h;2, GpasswdSedr1h;2,g’ passwd 第一行覆盖到暂存空间 并将暂存空间中的第一行覆盖到2行至尾行的所有行 结果就是所有内容都变成了第一行
Sed -r ‘1h;2,3H;$G’ passwd 第1行覆盖进暂存空间 第2、3行追加进暂存空间,将暂存空间中的内容追加到passwd文档中的最后一行后
Sed -r ‘4h;5x;6G’ passwd 将4行覆盖到暂存空间,将第5行和暂存空间中的刚才加进去的第4行进行互换,现在模式空间中第5行和第四行相同,将暂存空间中的第5行追加到模式空间的第6行中

Sed例子
Sed -r ‘/^#/d’ passwd 删除文件中的注释行
Sed -r ‘/1#/d’ passwd 删除以零个或多个空格或者tab开头的后带有#的行 删除注释行
Sed -r ‘\z[ \t]
//zd’ passwd 其中\z表示手动指定分隔符 默认/和本次匹配的//冲突 所以手动指定z为分隔 意思是山粗 删除以零个或多个空格或者tab开头的后带有//的行
Sed -r ‘/2 / d ’ p a s s w d 删 除 一 个 或 多 个 空 格 或 t a b 开 头 和 结 尾 的 行 删 除 空 行 s e d − r i ‘ /d’ passwd 删除一个或多个空格或tab开头和结尾的行 删除空行 sed -ri ‘ /dpasswdtabsedria\chroot’ passwd 在最后一行之后追加 一行chroot并保存进文件内 I选项表示 保存到源文件
sed -ri ‘/^SELINUX=/cSELINUX=disabled’ passwd 将以SELINUX=开头的行c是替换,替换成SELINUX=disable 并写入源文件
sed -r ‘2,6s/^/#/’ a.txt 将2到6行的开头加上#注释
sed -r ‘2,6/(.
)/#\1/’ a.txt 加注释
sed -r ‘2,6/(.*)/#&/’ a.txt 加注释

sed -r ‘s/^#*/#/g’ 将文中多个#替换为一个# 如下

在这里插入图片描述

Sed中使用外部变量
首先我们创建一个变量
var=11111
sed -r ‘1a$var’ passwd 在第一行后添加11111


  1. \t ↩︎

  2. \t ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值