浅述sed命令

1、sed工作原理

      sed(stream editor)是一种流编辑器,本身也是一个管道命令,可以分析编辑标准输入(standard input),包括对数据进行替换、删除、新增、选取特定行等等。运行时以行为单位,每次只处理一行的内容,因此它又被称为行编辑器。sed还可与正则表达式配合使用,从而简化文件的反复操作。

      sed在整个指令执行中,被编辑的文件本身内容并没有被改变(除非加入-i选项),因为sed在执行指令前,会先把文件中要处理的行临时调到其缓存中,这个缓存被称为“模式空间(pattern space)”,然后再执行相关的指令,并将处理的结果输出到标准的输出设备中(如屏幕),接着继续处理下一行,如此反复直到最后一行。但是有时候输入的指令较为复杂,该行只处理一次并不能达到指令要的结果,需要进行其他的处理,那么怎么办呢?这时就需要应用到保持空间(hold space),所谓保持空间就是临时存放还没有处理完的行的地方,在后续的处理中保持空间的内容会被再次调入模式空间处理,直至指令完成。打个比方,模式空间相当于加工车间,而保持空间相当于仓库,在加工时由于谋道工序缺料,需要临时把未加工完的半成品存放起来,而这个仓库就是用来保存加工车间还未完工的半成品的。

2、语法

sed  [OPTION]... ‘script’ [input-file]...
注意:script由地址定界和编辑命令组成

3、常用选项

-n:静默模式,即不显示模式空间的标准输出内容,默认是显示的
-e:多点编辑,即指定多个script运行
如:删除/etc/fstab文件中以#和UUID开头的行

浅述sed命令

-f:从指定的文件中读取脚本并编辑
-r:支持扩展的正则表达式,默认是支持基本正则表达式
-i:直接修改源文件(注意原文件的备份)

4、地址定界

(1)不给地址(空地址):

对全文内容进行处理

(2)单地址:

n:指定第几行
$:表示最后一行
/pattern/:被模式匹配到的所有行,比如:sed -n '/root/p' /etc/passwd

(3)范围地址:

n,+m:第n行到再加上m行之间的内容,如:3,+5表示从第3行到第8行的内容
n,m:表示第n行到第m行的内容
n,/pattern1/:表示从第n行到第一次被模式1匹配到的行之间的内容
/pattern1/,/pattern2/:表示第一次被模式1匹配到的行到第一次被模式2匹配到的行之间的内容
如:sed -n '/^root/,/^adm/p' /etc/passwd

浅述sed命令

(4)步进(~):

1~2:表示所有奇数行
2~2:表示所有偶数行

5、基本编辑命令

d:删除模式空间的内容
p:显示模式空间的内容,若不加-n选项,则会显示匹配的内容两次
a\text:在匹配到的行下面追加文本“\text”,支持转义字符\n来实现多行追加
如:sed '/root/a \magedu.com' /etc/passwd

浅述sed命令

i\text:在匹配到的行上面追加文本“\text”,支持转义字符\n来实现多行追加
如:sed '2i \magedu.com\nhomework' /etc/passwd

浅述sed命令

c\text:把匹配到的行替换为指定的文本“\text”
如:sed '/^UUID/c \uuid=this is a test' /etc/fsta
w /PATH/TO/SOMEFILE:把模式空间中匹配到的行保存到指定文件中
如:sed -n '/root/w /tmp/user.txt' /etc/passwd

浅述sed命令

r:读取指定文件的内容到当前模式匹配到的行下面
如:sed '/root/r /etc/issue' /etc/passwd

浅述sed命令

=:给匹配到的行添加行号
如:sed '/^UUID/=' /etc/fstab

浅述sed命令

!:条件取反,其位置为“地址定界!编辑命令”。
s///:查找替换,分隔符“///”可以自行指定,比如s@@@,s####
替换标记选项:
    g:全局替换
    p:显示替换成功的行
    w:将替换成功的行保存至指定文件中
如:sed -n 's@^UUID.*@hello,good man!@w /testdir/tihuan.txt' /etc/fstab

浅述sed命令

&:添加字符到已匹配到的字符前或后
如:[root@localhost ~]# sed 's@UUID@&hi@g' /etc/fstab:在UUID后添加hi

浅述sed命令

[root@localhost ~]# sed 's@UUID@hi&@g' /etc/fstab:在UUID前添加hi

浅述sed命令

6、高级编辑命令

h:把模式空间的内容覆盖至保存空间
H:把模式空间的内容追加至保持空间
g:把保持空间的内容覆盖至模式空间
G:把保持空间的内容追加至模式空间
n:把匹配到的行的下一行覆盖至模式空间
N:把匹配到的行的下一行追加至模式空间
x:把模式空间的内容与保持空间的内容互换
d:删除模式空间的行(单行)
D:删除模式空间的所有行

7、例题(截图仅是显示结果的一部分 )

(1)显示/etc/passwd文件的偶数行

浅述sed命令

(2)逆序显示/etc/passwd文件内容

浅述sed命令

(3)显示/etc/passwd文件的最后两行

浅述sed命令

(4)给文件/etc/passwd每行都添加一个空行

浅述sed命令

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

(0)
paopao
上一篇 2016-08-10 13:58
下一篇 2016-08-10 13:58

相关推荐

  • N26-第二周博客作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 一) 目录管理命令 1. cd :用于切换目录。命令格式为:cd dirname 命令使用技巧: ~]# cd 进入用户主目录 ~]# cd – 进入上一次所在目录 ~]# cd / 进入根目录 ~]# cd ~ 进入用户主目录 ~]# cd .. 返回上一级…

    2017-03-01
  • N22-妙手-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# mke2fs -t ext4 -m 2 -L MY…

    Linux干货 2016-10-09
  • Linux下计划任务神器-Crontab

    作为系统运维人员都清楚,在Linux下定义重复性的任务,我们一般会采用crontab来进行:crontab这个指令所设置的工作将会循环的一直进行下去!可循环的时间为分钟、小时、每日、每月、每周。 crontab计划任务: 1)常见用法:crontab命令的作用和用法如下:描述:为每个用户维护周期性的计划任务文件用法:crontab [-u 用户][-l|-r…

    Linux干货 2016-07-22
  • 关于nginx状态监控字段的个人见解(求真相)

    今天看到了马哥视频其中一节对nginx状态监控信息的介绍,对视频ppt上的监控字段解析产生了一些疑问,ppt内容如下: active connections – 活跃的连接数量server accepts handled requests — 总共处理了xxx个连接 , 成功创建xxx次握手, 总共处理了xxx个请求reading — 读取客户端的连接数.w…

    Linux干货 2016-07-12
  • sed 和 vim 的 用法

    处理文本的工具 三剑客之 sed sed是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变 ,除非你使用重定向存储输出。Sed主要用来自动编辑…

    Linux干货 2016-08-12
  • linux上的LVM简明教程

    LVM是一个多才多艺的硬盘系统工具。在Linux上非常的好用,传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。 首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV…

    Linux干货 2017-05-02