(10.1)流编辑器sed技术概览

本文深入探讨了sed流编辑器的使用方法,包括其工作流程、命令格式、正则表达式应用、地址设定、常用命令及暂存空间的利用。通过实例展示了sed在文件编辑、模式查找与替换上的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.流编辑器sed:不需要与人进行交互,修改文件是重点

  • sed工作流程
    (1)sed是一种在线的,非交互式的编辑器,它一次处理一行内容。
    处理时,把当前处理的行存储在临时缓冲区中。称之为模式空间pattern space。
    接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
    接着处理下一行,这样不断重复,直到文件末尾。
    文件内容并没有改变,除非你使用重定向存储输出。
    Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序。

在这里插入图片描述

  • 命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
注意:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才是非0

sed -ri bak
sed -ric --follow-symlinks
  • 支持正则表达式
    (1)与grep一样,sed在文件中查找模式时,也可以使用正则表达式RE和各种元字符。
    (2)正则表达式是括在斜杠间的模式,用于查找和替换 ,以下是sed支持的元字符
    (3)使用基本元字符集:^ ,$, .,*,[],[^],\ <\ >,\ (\ ),{ \ }
    (4)使用扩展元字符集:?,+,{ },|,( )
    (5)使用扩展元字符的方式:\ +,sed -r
  • eg:
sed 'd' passwd		读一行到模式空间就删除 
sed '4,7d' passwd	删除文件4-7行, 没有真正修改文件
sed '4,7di' passwd	删除文件4-7行 ,真正修改文件!!

sed	--help|grep '\-r'
sed -ri		-i表示真改文件		-r表示支持扩展元字符

  • eg:
sed -r 'p' /etc/passwd				p表示打印,读一行打印一行				
sed -r -n 'p' /etc/passwd			-n表示静默的方式,单纯的执行p,所以n和p基本一起用
sed -r -n '/root/p' /etc/passwd		打印只有root的行
sed -r -n '/root/=' /etc/passwd		打印只有root的行的行号

查找和替换
sed -r 's/root/alice/' /etc/passwd		s表示search查找,查找所有行,读一行到模式空间,这么去做
sed -r 's/root/alice/g' /etc/passwd			g表示全局,一行所有的
sed -r 's/root/alice/gi' /etc/passwd		i表示忽略大小写

查找
sed -r '/root/d' /etc/passwd		在模式空间删除带有root的行

将路径进行查找和替换
u.txt的内容:
/etc/abc/456换成:/var/wangji

sed -r '/\/etc\/abc/\/var\/wangji\//' u.txt   sed -r '/ 路径1 / 路径2  /' u.txt,记得加上转义

grep和sed替换文件中的字符串 
sed -i s/"str1"/"str2"/g ` grep "str1" -rl --include= "*. [ch]"./` 将当前目录下的所有.c、.h文件中的str1字符串替换为str2字符串。

2.sed地址(定址)

  • 地址用于决定对哪些行进行编辑。地址形式可以是数字,正则表达式或者二者的结合。
    如果没有指定地址,sed将处理输入文件中的所有行
sed '1,3d' passwd			删除1到3行
sed -r 's/root/wangji/g' /etc/passwd 		将每行的root替换成wangji

sed -r '/^bin/,5d' passwd 			删到第5行
sed -r '/^bin/,+5d' passwd 			从bin开始的行,再连删5行

sed -r ‘/root/d’ passwd			将带有root的行删除
sed -r ‘/root/!d’ passwd			除了带有root的行都删除

sed -r ‘1~2d’ passwd		从第一行开始,每间隔2行删除,即:删除所有奇数行

3.sed命令

  • sed命令告诉sed对指定行进行何种操作,包括打印,删除,修改等
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • eg:

删除命令:d
sed -r '3{h;d}'	passwd		{}表示有多个命令,对于每行,先暂存,再删除
sed -r '$d'	passwd		删除最后有一行

替换命令:s
sed -r ‘1,5s/(.*)/#\1/’ passwd 		()不需要加\,因为有-r。将1-5行最前面加上#
sed -r 1,5s/^/#/

sed -r 's/[0-9][0-9]$/&.5' passwd			&表示查找串中匹配到的内容,将两个数字结尾的后面加上.5

读文件命令:r
sed -r '/Suan/r /etc/newfile' datafile		将newfile的内容读入到带有Suan的行

写文件命令:w
sed -r '/root/w /tmp/1.txt' datafile   凡是root行保存到/tmp/1.txt文件中

追加:a,i,替换命令:c
sed -r '/root/awwwwwwwww' passwd	处理到root的行,在下一行追加一个wwwwwwwww
sed -r '2a111111111' passwd		在第2行的下一行追加11111

sed -r '/root/iwwwwwwwww' passwd	处理到root的行,在上一行追加一个wwwwwwwww
sed -r '/root/cwwwwwwwww' passwd	用wwwwwwwww替换root的行

获取下一行命令:n:next
sed -r '/adm/{n;d}' passwd			删除匹配adm的那行的下一行,d可以换成s/sbin/wangji/,表示将这下一行的sbin换成wangji
所以,类似下下行
sed -r '/adm/{n;n;d}' passwd	


4.sed的暂存空间

  • 模式空间->暂存空间:h和H
    小写是覆盖,大写是追加
  • 暂存空间->模式空间:g和G
    小写是覆盖,大写是追加
    在这里插入图片描述
  • eg
默认情况下,暂存空间里面是个换行符(空行)
sed -r 'g' file		处理第一行时,从暂存空间拿过来一个换行符,拿来覆盖,第二行类推
sed -r 'G' file		处理第一行时,从暂存空间拿过来一个换行符,拿来追加,这行下面会增加一个空行,第二行以此类推

暂存和取用命令:h,H,g,G
sed -r '1h;$G' /etc/hosts		把/etc/hosts的第1行覆盖写到暂存空间(模式空间只有1行,暂存空间只有1行),
然后把暂存空间的内容追加到/etc/hosts的最后1行
(相当于把/etc/hosts的第1行复制到最后一行)

sed -r '1{h;d};$G' /etc/hosts	把第1行覆盖写到暂存空间,并删除/etc/hosts的第1行,然后把暂存空间的内容追加到最后一行(相当于把/etc/hosts的第1行复制到最后一行,并删除第1行)
sed -r '1h;2,$g' /etc/hosts		把第1行放到暂存空间,然后将暂存空间的内容放到第2行至最后一行	
sed -r '1h;2,3H;$G' /etc/hosts 	把第1,2,3行放到模式空间,然后追加到 /etc/hosts文件的最后一行


反向选择:!
sed -r '3!d' /etc/hosts    除了第3行外都删除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值