文本编辑器—sed

一、sed介绍

sed 一种流式编辑器。一个流式编辑器通常对来自输入流(一个文件或者是管道的输入)的文本进行转换处理。在某些方面类似支持脚本编辑的编辑器,sed在多输入情况下只开放一个通道工作,因此更加效率。sed与其他编辑器最大的区别在于,能对管道输入的文本进行过滤处理。

二、sed工作机制

sed保持两个数据缓冲区:主要活动的模式空间,以及辅助性的保持空间。两者初始状态都为空。

sed以对输入的每一行文本执行下列循环操作的方式来运作:首先,sed从输入流读取一行数据,移走任何后面的换行符【注】,将读取的一行放入模式空间。然后执行命令;每一条命令可以关联一个地址:这些地址是一种条件码,一条命令执行之前先确认条件是否符合才会被sed执行。

当执行完脚本末行命令时,如果没有启用 -n选项,打印模式空间里的文本到输出流,在后面加上移走的换行符。然后读取下一输入行循环处理。所以sed在默认情况下不会对原文件改动。

如果没有特别指令(比如'D')说明,在下一个循环开始前删除模式空间的内容。而保持空间则可以保存循环之间的数据。

[注]:当有新内容追加到模式空间时,自动添加换行符

三、sed基本用法

用法:sed [OPTIONS…] 'scripts' FILE…

1.如何选定指定的行

sed中有一些指定行范围的方法,用行号指定和用正则表达式指定,以及两者结合起来指定。

  1. 空地址

    匹配所有行;

  2. N

    匹配输入中第N行;

  3. $

    匹配最后一行;

  4. /PATTERN/,\#PATTERN#

    匹配符合正则表达式的行;

  5. /PATTERN/I

  正则匹配时忽略大小写

指定范围表达方式

  1. N1,N2

    匹配N1到N2之间的行

  2. 0,/PATTERN/

    从第一行开始匹配,直到符合正则表达式的那行

  3. /PATTERN1/,/PATTERN2/

    匹配符合两正则表达式之间的行

  4. FIRST~STEP

    步进,匹配FISRT+n*STEP行,n为自然数。比如,1~2表示匹配奇数行


2.sed命令常用选项

选项 说明
-n 取消模式空间内容的自动打印
-e 多点编辑
-f 指定脚步文件
-r 支持扩展正则表达式
-i 原文件编辑(慎用)

3.sed编辑命令

1)d

删除当前模式空间内容,立即开始下一循环(不打印任何内容)

~]$ sed '1,10d' test.txt          #打印除1到10行外的内容

2)p

打印模式空间的内容;常与-n选项公用

~]$ sed -n '1~2p' test.txt        #打印奇数行的内容

3)a \text

行后追加text文本;另起的一行

4)i \text

行前插入text文本;另起的一行

5)c \text

指定行替换为text文本

6)w /path/file

保存模式空间中的内容到指定文件

7)r /path/file

读取文件内容到模式空间

8)=

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

9)!

标记在地址后边,表示地址取反

~]$ sed -n '1!p' text.txt        #除第一行外全部打印

4.替换命令

s/REGEXP/REPLACEMENT/FLAGS

表达式中'/'可用其他单个字符替换

(一)REPLACEMENT中有特殊字符,代表特殊意义

1)&

表示查找到的内容

~]$ sed 's/.*/#&/' test.txt             #为每一行开头加上#

2)\L

将替换的内容都转换成小写字母,直到遇到U或者E。

3)\l

将下一个字符转换成小写字母。

4)\U

将替换的内容都转换成大写字母,直到遇到L或者E。

5)\u

将下一个字符转换成大写字母。

6)\E

停止L或者U的字母大小写转换。

(二)FLAGS

1)g

表示全行替换;默认只替换第一个匹配项

2)p

打印替换成功的行

3)w /path/file

保存替换成功的行到指定文件

例1,将/etc/fstab 文件中UUID转为小写,UUID行其他字母转为大写

$ sed -r 's/(^U.*)=(.*)/\L\1=\U\2/' /etc/fstab

QQ图片20160811195700.png

例2,删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

$ sed -r 's/^#[[:space:]]+//' /etc/fstab

QQ截图20160811200737.png

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

(0)
cutemsyucutemsyu
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • 基于nginx实现7层http的负载均衡

    一、实验环境实验环境为三台服务器:1. nginx负载均衡器1. 内网ip:192.168.11.1002. 外网ip:172.16.251.892. 提供网页服务的RS-1服务器:192.168.11.2013. 提供网页服务的RS-2服务器:192.168.11.2024. 拓扑如下:二、实验配置后台服务器配置:1. 后台提供网页服务的两台服务器配置:y…

    Linux干货 2017-06-29
  • Linux磁盘管理(一)

      磁盘,计算机最常见的存储硬件设备。对Linux而言,其哲学思想之一就是一切皆文件,因此linux之上所有设备的操作都是通过文件接口来实现的,也就是说在访问设备的时候就如同访问一个文件一样,因为他们使用的都是文件系统接口。 向磁盘中写入数据的操作过程:   首先硬件设备在系统上会映射成一个一个文件,我们在对硬件中写入数据就相当…

    Linux干货 2016-08-30
  • 计算机硬件及Linux简介

    计算机的组成 计算机主要分成五大部分:输入单元、控制单元、运算单元、存储器、输出单元。 其中,中央处理器(CPU)是一个具有特定功能的芯片,含有微指令集。包括控制单元与运算单元。 控制单元对程序进行控制,调度程序、数据、地址。运算单元负责对数据的各种逻辑运算和数字运算。 计算机的功能 包括但不限于 驱动程序:字面意思。 进程管理:计算机内部能够通过分配资源,…

    Linux干货 2016-10-30
  • 马哥教育网络班22期第5周课程作业

    1、显示当前系统上root、fedora或user1用户的默认shell; cat /etc/passwd | grep ^root | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); …

    Linux干货 2016-12-05
  • 第六周作业

    一、Vim编辑器练习: 用Vim编辑器做下面的练习,我的Linux系统(CentOS 6.9)安装了精简版系统,没有Vim编辑器。 a、设置Yum源为网易开源镜像站。 b、选择对应“镜像名”,到对应的“CentOS使用说明”里面查看内容 c、看着CentOS说明操作就可以了 d、使用说明 首先备份/etc/yum.repos.d/CentOS-Base.re…

    Linux干货 2017-08-22
  • 文本处理工具

    文本查看工具 less [les]  查看文件 功能比MORE更强大      -N  显示行号      查看时使用的命令      / OR ? 搜索的内容    搜索关键字 &nbsp…

    Linux干货 2017-04-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 10:11

    文章从sed原理到常见用法,有理论有实践,排版也很精美,建议对大标题使用字体加粗会更好一点哦。