Sed编辑器

sed是一种流编辑器,用于处理数据流并在执行预定义的编辑规则后输出。它的工作流程包括读取、执行和显示,常用于文本处理,如替换、删除、插入和打印内容。通过地址选择特定行进行操作,如行号或模式匹配。常用命令包括s(替换)、d(删除)、a(增加)、i(插入)等。sed还支持使用-e和-f选项执行多条命令,以及-i选项直接修改文件。

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

目录

sed编辑器

命令格式:

常用选项:

常用操作:

打印内容:

使用地址:

​编辑

替换: 

插入:


sed编辑器

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个

命令文本文件中。

sed 的工作流程主要包括读取、执行和显示三个过程:

•读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称

模式空间,pattern space)。

•执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed

命令 将会在所有的行上依次执行。

•显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都

被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变

化,除非是用重定向存储输出。

命令格式:

sed -e '操作' 文件1 文件2 ...

sed -n -e '操作' 文件1 文件2 ...

sed -f 脚本文件 文件1 文件2 ...

sed -i -e '操作' 文件1 文件2 ...

sed -e 'n{

操作1

操作2
...
}' 文件1 文件2 ...

常用选项:

-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般

在执行多个操作命令使用

-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。

-h 或--help:显示帮助。

-n、--quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。

-i:直接修改目标文本文件。

常用操作:

s:替换,替换指定字符。

d:删除,删除选定的行。

a:增加,在当前行下面增加一行指定内容。

i:插入,在选定行上面插入一行指定内容。

c:替换,将选定行替换为指定内容。

y:字符转换,转换前后的字符长度必须相同。

p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打

印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。

=:打印行号。

l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)


打印内容:

sed -n -e 'p' a.txt

 sed -n -e '=' a.txt

 sed -n -e 'l' a.txt

sed -n -e '=;p' a.txt

sed -n -e '=' -e 'p' a.txt

sed -n '

> =

> p

> ' a.txt


使用地址:

sed编辑器有2种寻址方式:

1、以数字形式表示行区间

2、用文本模式来过滤出行

sed -n '1p' a.txt

sed -n '1p' a.txt

sed -n '1,3p' a.txt

sed -n '3,$p' a.txt

sed -n '1,+3p' a.txt     #打印1之后的连续3行,即1-4行

sed '5q' a.txt           #打印前5行信息后退出,q表示退出

sed -n 'p;n' a.txt      #打印奇数行;n表示移动到下一行

sed -n 'n;p' a.txt        #打印偶数行

用脚本显示奇偶行

 

 sed -n ‘2,${n;p}'   a.txt         #从第2行打印奇数行

sed -n '/root/p' passwd   #匹配文件中有root的内容

sed -n '/^a/p' passwd   #打印所有开头是a的内容

sed -n '/bash$/p' passwd    #打印所有结尾是bash的内容

sed -n '/ftp\|root/p' passwd   打印含有ftp或root的内容

sed -n '2,/nobody/p' passwd    从第二行打印到含有noboby的内容

sed -n '2,/nobody/=' passwd  #打印从第二行到含有noboby的内容的行号

sed -nr '/ro{1,}t/p' /etc/passwd    #-r表示支持扩展正则表达式

sed 'd' a.txt           #全删

sed '3d' a.txt               #就删第三行

sed '2,4d' a.txt             #删第二,第四行

sed '$d' a.txt                  #删除最后一行

sed '/^$/d' a.txt       #删除空行

sed '/nologin$/d' passwd              #删除以nologin结尾的内容

sed '/nologin$/!d' /etc/passwd        #“!”表示取反操作

sed '/two/,/four/d' a.txt        #从第一个位置打开行删除功能,到第二个位置关闭行删除功能


替换: 

行范围 s/旧字符串/新字符串/替换标记

4种替换标记:

数字:表明新字符串将替换第几处匹配的地方

g:表明新字符串将会替换所有匹配的地方

p:打印与替换命令匹配的行,与-n一起使用

w 文件:将替换的结果写到文件中

sed -n 's/root/admin/p' passwd   #把匹配到的第一个root替换为admin

sed -n 's/root/admin/2p' passwd    #替换第二次匹配到root

sed -n 's/root/admin/gp' passwd      #替换所有root

 sed -n 's/root//gp' passwd     #把匹配的root替换为空

sed -n '1,20 s/^/#/p' passwd    #把1到20行的前面加#

sed '/^root/ s/$/#/' passwd  #以root开头的内容把结尾替换成#

sed '/root/ s/^/#/' passwd    #把以root开头的内容的开头加上#

 sed -rn 's/.*root.*/#&/p' passwd  #表示将匹配到的整行文本以#开头进行注释,&表示匹配到的整行文本

sed -f c.sh a.txt    #对a.txt调用c.sh的规则

sed '1,20w out.txt' passwd  #将passwd的前二十行内容写入d.txt

sed '1,20 s/^/#/w d.txt' /passwd  #将passwd的前二十行的开头加#然后写入d.txt

sed -n 's/\/bin\/bash/\/bin\/csh/p' passwd  #将bin/bash替换为/bin/csh

sed -n 's!/bin/bash!/bin/csh!p' passwd        #使用“!”作为字符串分隔符

sed -i 's9\945\9\99\98\939g' e.txt        #将94599替换为9893


插入:

sed '/123/c ABC' a.txt   #把a.txt中的123替换为ABC
                         #"c"是sed命令中的替换操作符,表示将匹配到的行替换为指定的文本"ABC"

sed 'y/145/ABC/' a.txt   #使所有的1字符转换成A,所有的2字符转换成B,所有的3字符转换成C                     
                         #y是sed命令的一个操作符,表示进行字符替换。具体来说,它的作用是将a.txt文件中的所有字符1、4、5分别替换为A、B、C,然后将替换后的结果输出到标准输出

sed '1,3a ABC' a.txt   #在文本a.txt第1到第3行之间追加一行文本“ABC”

 sed '1i ABC' a.txt   #在a.txt文件的第一行前插入字符串"ABC"

 sed '5r /etc/resolv.conf' a.txt  #把etc/resolv.conf的内容插入a.txt的第五行
                                  #r的意思是将指定文件的内容读取并插入到当前正在处理的文件中的指定行之后 

sed '/root/{H;d};$G' passwd    #在passwd文件中找到包含字符串"root"的行,将该行的内容添加到模式空间中的缓冲区中,并删除该行。对于最后一行,使用$G命令将其添加到模式空间中的缓冲区中。最终,模式空间中的内容将包含所有以"root"开头的行,并且每个匹配行的下一行将与其一起输出。

sed '1,2H;3,4G' /etc/passwd            #将1、2行复制到3和4行的下面

 echo "111222333" | sed -r 's/(111)(222)/\2\1/'    #将字符 111 和 222 互换位置

 echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/'        #将第一个字符和最后一个互换位置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值