sed简介

sed介绍

sed是Stream Editor(流编辑器)的缩写,简称流编辑器;用来处理文件的。

原理:

sed是一行一行读取文件内容并按照要求进行处理,把处理后的结果输出到屏幕。

 

首先sed读取文件中的一行内容,把其保存在一个临时缓存区中(也称为模式空间)。

然后根据需求处理临时缓冲区中的行,完成后把该行发送到屏幕上。

总结:

由于sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会直接修改原文件。

sed的命令行使用

sed常见的语法格式有两种,一种叫命令行模式,另一种叫脚本模式。

命令行语法格式:

sed  [options]  '处理动作' 文件名

常用选项

 

常见处理动作

注意:以下所有的动作都要在单引号里 

动作

说明

‘p’

打印

‘i’

在指定行之前插入内容

‘a’

在指定行之后插入内容

‘c’

替换指定行的所有内容

‘d’

删除指定行

‘s’

查找并替换

练习:

文件准备

# vim a.txt

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

298374837483

172.16.0.254

10.1.1.1

打印操作

sed '' a.txt

对文件不做任何操作,直接打印

sed 'p' a.txt

文件中每行内容都被打印了两次

sed -n 'p' a.txt

模式空间中的内容不会被打印

sed -n '2p' a.txt

只打印第二行的内容

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

打印1到5行

sed -n '$p' a.txt

打印最后一行

增加文件内容操作

i 指定位置上一行插入

a 指定位置下一行插入

sed '2ihelloworld' a.txt

在第2行的上一行插入helloworld

sed 'ihelloworld' a.txt

在每一行的上一行插入helloworld

sed '2ihello\nworld' a.txt

在第2行的上一行插入两行内容

sed '2ihello\

> world' a.txt

sed '2ahelloworld' a.txt

在第2行的下一行插入helloworld

sed '2,4ahelloworld' a.txt

在2到4的每一行插入helloworld

sed 'ahelloworld' a.txt

在每一行的下一行插入helloworld

修改文件内容操作

c 替换指定的整行内容

sed '$chello world' a.txt

把文件最后一行替换为hello world

sed '2chello world' a.txt

把文件第2行替换为hello world

sed '/^bin/c hello' a.txt

以bin开头的行替换为hello

sed 'c hello' a.txt

把每一行都替换为hello

sed '1,5c hello' a.txt

把1-5行的内容替换为一行hello

删除文件内容

sed '4d' a.txt

删除第4行

sed '1,4d' a.txt

删除1-4行

sed '/[0-9]/d' a.txt

删除带数字的行

sed -r '/([0-9]{1,3}\.){3}[0-9]/d' a.txt

使用扩展正则删除ip

sed '$d' a.txt

删除最后一行

对文件进行搜索替换

语法:sed 选项 's/搜索的内容/替换的内容/动作' 需要处理的文件

其中,s表示search搜索;斜杠/表示分隔符,可以自己定义;动作一般是打印p和全局替换g。

sed -n 's/root/ROOT/pg' a.txt

将文件中所有的root替换为ROOT

sed -n 's/^#//gp' a.txt

删除#号开头的行

sed -n 's#/bin/bash#ji xiang#pg' a.txt

使用#号也可以作为分割符

sed -n '10s#/sbin/nologin#jili#p' a.txt

指定行号进行替换

sed -n '1,5s/^/#/p' a.txt

在1-5行的开头加#号

sed -n 's/\(10.1.1\).1/\1.254/gp' a.txt

将10.1.1.1替换为10.1.1.254

sed的其他命令

 

sed '3r /etc/hosts' a.txt

将/etc/hosts中的内容添加到文件的第3行之后

sed 'r /etc/hosts' a.txt

将/etc/hosts中的内容添加到文件的每一行之后

sed '$r /etc/hosts' a.txt

将/etc/hosts中的内容添加到文件的最后一行之后

sed '1,5w b.txt' a.txt

把a.txt文件1-5行的内容保存到b.txt

sed -n '1,5s/adm/&in/gp' a.txt

在adm之后追加in,使用&表示匹配到的元素

sed -n '/sbin/=' a.txt

打印出包含关键字的行号

sed -n '1,5!p' a.txt

打印除了1-5以外的行

sed '/lp/q' a.txt

匹配到lp就退出

sed的其他选项

-e 多项编辑

-r 扩展正则

-i 修改原文件,注意:-ni 不要一起使用,p命令 不要在使用-i时使用

sed -ne '1p' -ne '5p' a.txt

打印第一行和打印第五行

sed -e '2d' -e '5ahello' a.txt

删除第二行和在第5行后加hello

sed -ne ‘2p;5p’ a.txt

打印第二行和打印第五行

sed -e ‘/^#/d’ -e ‘/^$/d’ a.txt

删除文件中的注释和空行

sed -e ‘/^#/d;/^$/d’ a.txt

删除文件中的注释和空行

sed -r ‘/^#|^$/d’ a.txt

删除文件中的注释和空行

sed -nr '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' a.txt

grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt

grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 2.txt

打印文件中的ip地址

sed -i 's/root/ROOT/g' 11.txt

修改源文件中的root为ROOT

sed结合正则使用

 

sed -n '/^bin/,/^lp/p' a.txt

匹配以bin开头到lp开头的行

sed -n '/^bin/,/^lp/!p' a.txt

匹配除了以bin开头到lp开头的其他行

sed -n '/^bin/,4p' a.txt

匹配以bin开头到第4行

sed -rn '/^bin|^lp/p' a.txt

匹配以bin和lp开头的行

sed脚本模式

用法:sed -f scripts.sh  file

脚本的第一行写上

#!/bin/sed -f

1,5d

s/root/hello/g

3i777

5i888

a999

p

注意事项:

1) 脚本文件是一个sed的命令行清单。'commands'

2) 在每行的末尾不能有任何空格、制表符(tab)或其它文本。

3) 如果在一行中有多个命令,应该用分号分隔。

4) 不需要且不可用引号保护命令

5) #号开头的行为注释

举例说明:

数据准备:

vi 11.txt

stu3:x:509:512::/home/user3:/bin/bash

stu4:x:510:513::/home/user4:/bin/bash

stu5:x:511:514::/home/user5:/bin/bash

编辑sed脚本:

vi 1.sed

#!/bin/sed -f

3a**********************

$chelloworld

1,3s/^/#&/

执行:

sed -f 1.sed -i 11.txt

cat 11.txt

#stu3:x:509:512::/home/user3:/bin/bash

#stu4:x:510:513::/home/user4:/bin/bash

helloworld

**********************

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值