sed命令的作用linux,sed命令用法详解

1.sed运行原理

sed(stream editor)是一个行处理器。处理时,把当前处理的行放到“模式空间中”,处理完毕后,把该行输出到屏幕,接着处理下一行;这样不断重复,直到末行;此时文件本身内容并没有改变

2.sed用途

自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序

3.sed命令用法详解

(1)sed [option].. 'script' file..

常用选项 -n 静默模式,不输出模式空间内容

-r 支持扩展正则表达式

-e 多点编辑

-f 从指定文件读取编辑脚本

-i 原处编辑,改变文件本身内容

实例:a文件原本内容如下

3c8ce6380daa33c267ccb0e2e66a02de.png

用sed使其显示第一行,并在第二行前插入‘this is a test’

3c8ce6380daa33c267ccb0e2e66a02de.png

(2)script格式:

位置界定编辑命令

a.地址界定

A不给地址,对全文界定

B单地址:

# :指定的行

/pattern/:被模式匹配的没一行

C地址范围:

#1,#2:从#1行到#2行

#1,+#2:从#1行开始,往下再匹配#2行

/pat1/,/pat2/:从第一次匹配到pat1的行到第一次匹配到pat2的行

#,/pat/:从#行到第一次匹配到pat的行

D~:步进

1~2:  奇数行

2~2: 偶数行

b.常见的编辑命令

p 显示匹配到的行

d删除匹配到的行

i\text在匹配行的前边插入文本,加上\n,支持多行插入

a\text在匹配行的下边追加文本,加上\n,支持多行追加

c\text把匹配行换为单行或多行文本

=为模式空间中的行打印行号

!模式空间匹配行取反处理

r file读取指定文件到匹配行的后边

w file保存匹配行到指定文件

s///查找替换,支持使用其它分隔符:s@@@ ,s###

替换标记:

g;行内全局替换

p:显示替换成功的行

w /path/to/somefile:就替换成功的行保存到文件中

实例一:在a文件第二行后边追加两行文本

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

实例二:处理b文件,以/^1/到/^4/行不输出,然后把内容保存到/root/b文件下

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

c.高级编辑命令

d:删除当前空间模式的行

D:删除当前模式空间开端到\n的内容(不标准输出),但剩余标准空间继续执行sed

g:把保存空间内容覆盖到模式空间

G:把保存空间内容追加到模式空间

h:把模式空间内容覆盖到保存空间

H:把模式空间内容追加到保存空间

n:读取匹配到的行的下一行覆盖到模式空间

N:读取匹配到的行的下一行追加到模式空间

x:模式空间和保存空间内容互换

实例解析:本实验还是以a文件为实验文件,a文件内容如下

3c8ce6380daa33c267ccb0e2e66a02de.png

1.sed -n 'n;p' a:显示的是偶数行

3c8ce6380daa33c267ccb0e2e66a02de.png

分析:‘-n’静默模式,默认不输出;‘n;p’里的n的作用是把匹配到的行的下一行覆盖到模式空间,p是输出到屏幕;当把第一行内容匹配进模式空间时,第二行会把第一行覆盖掉,结果显示的是第二行,然后处理第三行,显示第四行内容,依次类推,直到行末。

2.sed '$!N;$!D' a  只读取最后两行

3c8ce6380daa33c267ccb0e2e66a02de.png

分析:‘$!N’意思是当不是最后一行时,读取匹配到的行的下一行追加到模式空间;

‘$!D’意思为当不是最后一行时,删除当前模式空间内容开始到/n结束,其余继续接受sed处理

课后作业

1,删除/etc/grub.conf中所有以空白开头的行行首全部空白字符

3c8ce6380daa33c267ccb0e2e66a02de.png

2.删除/etc/fstab中以#开头,且后边至少跟一个空白字符的行的行首的#和空白字符

3c8ce6380daa33c267ccb0e2e66a02de.png

3.在/root/install.log每行行首添加#

3c8ce6380daa33c267ccb0e2e66a02de.png

4.在/etc/fstab中不以#开头的行行首加上#

3c8ce6380daa33c267ccb0e2e66a02de.png

5.处理/etc/fstab,分别取出其目录名与基名

3c8ce6380daa33c267ccb0e2e66a02de.png

6.用sed取出本机ipv4

3c8ce6380daa33c267ccb0e2e66a02de.png

7.统计centos安装光盘里Package目录下所有rpm文件以.分割的倒数第二个字段重复次数

(1)先查看光盘挂载在哪里

3c8ce6380daa33c267ccb0e2e66a02de.png

(2)

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:mengzhiqian,如若转载,请注明出处:http://www.178linux.com/32490

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值