Shell编程--sed

介绍--逐行处理模式

非交互式的编辑器,处理时,会把文本先存储在临时缓冲区,叫模式空间,文件不会改变,只会显示在屏幕上,周到使用重定向输出

格式

sed [选项] '命令' 文件

sed 选项-f 脚本 文件

返回值

一般都是0,不管对错,除非命令输错

sed与正则

使用方式

\ +

sed -r

sed -r

命令

删除命令:d

head -10 /etc/passwd > passwd.txt
#  i是追加到文件
sed -r '/root/d' passwd.txt
sed -r '3d' passwd.txt
sed -r '3{d}' passwd.txt
#一般要加大括号,不加也行
sed -r '3{d;}' passwd.txt
#分号隔开命令
sed -r '3,$d' passwd.txt
#删除3到最后一行
sed -r '$d' passwd.txt
#删除最后一行

替换命令: s(常用)

sed -r 's/root/aofa/' passwd.txt
#s///与vim中一样
sed -r 's/^root/aofa/' passwd.txt
#只换行首的一个
sed -r 's/root/aofa/g' passwd.txt
#g全局选项,换整行的
sed -r 's/[0-9][0-9]$/&.5/' passwd.txt
#把10换位10.5
sed -r 's/(mail)/E\1/' passwd.txt
#mail改为Email
sed -r 's#(mail)#E\1#' passwd.txt
# /可以替换为#,解决文件中有/的问题,如果要替换/

读文件命令: r

sed -r '$r 1.txt' paswd.txt
#把1.txt中的文件追加到行尾
#如果不加$,会在每一行都加一边
sed -r '/^root/r 1.txt' passwd.txt
#在第一行后追加

写文件命令:w(另存为)

sed -r 'w 111.txt' 1.txt
sed -r '/root/w 123.txt' 456.txt
sed -r '1,5w 123.txt' 456.txt 

追加命令: a(之后)

sed -r 'a123' passwd.txt
#每行都加

sed -r '2a123' passwd.txt

sed -r '2a 1111\
222222\
3333333' passwd.txt
#追加三行

追加命令: i(之前)

ed -r 'i123' passwd.txt
#每行都加

sed -r '2i123' passwd.txt

sed -r '2i 1111\
222222\
3333333' passwd.txt
#追加三行

替换整行命令:c(常用)

sed -r '2caaaaaaaaaaaaaaaaaaaaaaaaa' passwd.txt

获取下一行命令: n

sed -r '/root/{n;d}' passwd.txt
#删除root下一行

sed -r '/root/{n;s/bin/ding/g}' passwd.txt
#root下一行的bin换为ding

反向选择: !

sed -r '2,$d' passwd.txt

sed -r '2,$!d' passwd.txt

多重编辑 : e

sed -r '1,3d' -e '4s/adm/admin/g' passwd.txt

sed -r '1,3d;4s/adm/admin/g' passwd.txt

sed -r '2s/bin/ding/g;2s/nologin/bash/' passwd.txt  

sed -r '2{s/bin/ding/g;s/nologin/bash/}'

示例

#删除配置文件中的#配置
sed -ri '/^#/d' /etc/vsftpd/vsftpd.conf



#修改文件

sed -ri '$a chroot_local_user=YES ' /etc/conf


sed -ri '/^SELINUX=/c SELINX=disabled' /etc/selinux/conf

#给文件行加注释

sed -r '1,10s/^/#/' a.txt

sed -r '1,10s/(.*)/#\1/' a.txt
 


#sed中使用外部变量
#var1=11111
sed -r '1a$var1' passwd.txt


sed -r "1a$var1" passwd.txt

sed -r "$a$var1" /etc/hosts
#会报错
sed -r "\$a$var1" /etc/hosts
#双重否定

缓存区数据交换

  1. 首先需要明白, sed处理文件是逐行处理的, 即读取一行处理一行,输出一行;

  2. sed把文件读出来每一行存放的空间叫模式空间, 会在该空间中对读到的内容做相应处理;

  3. 此外sed还有一个额外的空间即暂存空间, 暂存空间刚开始里边只有个空行, 记住这一点;

  4. sed可使用相应的命令从模式空间往暂存空间放入内容或从暂存空间取内容放入模式空间;

缓存区sed程度命令

命令含义
h模式空间里面的内容复制到暂存空间缓存区(覆盖方式)
H模式空间里面的内容复制到暂存空间缓存区(追加方式)
g暂存空间里面的内容复制到模式空间缓存区(覆盖方式)
G暂存空间里面的内容复制到模式空间缓存区(追加方式)
x交换2个空间的内容

示例

#将模式空间第一行复制到暂存空间(覆盖方式),并将暂存空间的内容复制到模式空间中的最后一行(追加方式)
sed '1h;$G' 1.txt
# 1h 从模式空间中将第一行数据复制到暂存空间(覆盖方式)
# $G 将暂存空间中的内容复制到模式空间中最后一行(追加方式)



#第一行删除后粘贴到最后1行
sed '1{h;d};$G' 1.txt

# 1{h;d}对模式空间中的第一行数据同时进行复制到暂存空间(覆盖方式)和删除模式空间中的第一行数据



#第一行数据复制粘贴替换其他行数据

sed '1h;2,$g' 1.txt

#将模式空间第一行复制到暂存空间(覆盖方式), 最后将暂存空间的内容复制到模式空间中替换从第2行开始到最后一行的每一行数据(覆盖方式)




#将前3行数据数据复制粘贴到最后一行
sed '1,3h;$G' 1.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值