点击返回 自学Linux命令行与Shell脚本之路html
18.1-sed编辑器基础特性
linux世界中最普遍使用的两个命令行编辑器:linux
1. sed概念
sed是stream editor的简称,也就是流编辑器。sed 是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认状况下,全部的输出行都被打印到屏幕上。正则表达式
sed编辑器会执行如下操做:shell
- 一次从输入中读取一行数据。
- 根据所提供的编辑器命令匹配数据。
- 按照命令修改流中的数据。
- 将新的数据输出到STDOUT。
在流编辑器将全部命令和一行数据匹配完毕后,它会读取下一行数据重复这个过程。缓存
解析:编辑器
首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),而后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,而后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。spa
2. sed命令格式
1 sed OPTIONS... <SCRIPT> [INPUTFILE...]
- -n 使用安静(silent)模式(想不通为何不是-s)。在通常sed的用法中,全部来自stdin的内容通常都会被列出到屏幕上。但若是加上-n参数后,则只有通过sed特殊处理的那一行(或者动做)才会被列出来;
- -e 直接在指令列模式上进行 sed 的动做编辑;
- -f 直接将 sed 的动做写在一个文件内,
-f filename
则能够执行filename内的sed命令;
- -r 让sed命令支持扩展的正则表达式(默认是基础正则表达式);
- -i 直接修改读取的文件内容,而不是由屏幕输出。
2.1 在命令行定义sed编辑器命令
sed中y命令与s命令的区别命令行
- y通常是行级别的替换,s通常是列级别替换(固然也能够转换成行级)
- s替换的是总体,y替换的是每一字母对应的单个字母, 会用斜线间的第二个文本字符串来替换第一个文本字符串


2.2 在命令行使用多个sed编辑器命令
- 在命令行使用多个sed编辑器命令,就须要使用 -e 选项。
- 同时使用多个编辑命令,命令之间要用;隔开(!除外),而且在命令末尾和分号以前不能有空格
- 也可使用次提示符来分割命令


2.3 在文件中读取sed编辑器命令
在sed命令中用 -f 选项来制定文件。这种状况下,不用在每条命令后面放一个分号。3d

3. sed编辑器基础
3.1 更多的替换选项
S命令:行中替换文本,替换的是总体,默认状况下只替换没行中出现的第一处 code
s/原文本/新文本/标记位 , 标记为以下:
- p :显示替换成功的行
- g :全局替换
- w filename : 将替换成功的结果保存至指定文件中
- 数字: 标明新文本将替换第几处模式匹配的地方





3.2 使用地址
若是只想将命令做用在特定行货某些行,就必须使用 行寻址 。
在sed编辑器中有两种形式的行寻址:
指定的格式一:
指定的格式二(多个命令组):
1 address] {
2 command1
3 command2
4 command3
5 ....
6 }
3.2.1 数字方式的行寻址
使用数字方式的行寻址,能够用行的文本流中的行位置来引用。
- 在命令中指定的地址可使单个行号,或是用起始行号、逗号以及结尾行号指定的一个区间范围内的行
- 可使用行地址区间
- 可使用 $ 符号,将命令做用到文本中从某行开始的全部行。



3.2.2 使用文本模式过滤器
格式: /pattern/command
- 必须使用/将要指定的pattern封起来
- 会将该命令做用到包含指定文本模式的行上。
3.2.3 命令组合
- 若是须要在单行上执行多条命令,可使用花括号将多条命令组合在一块儿
- 也能够在一组命令前指定一个地址区间


3.3 删除行 d命令
以前讲的都是替换命令s , 其实还有不少其余命令。
删除命令d ,会删除匹配指定寻址模式的全部行。
- 若没有添加寻址模式,全部文本行都会被删除
- 经过行号指定或区间指定或特殊符号&,能够删除特定的文本行
- sed编辑器的模式匹配也适用于删除命令
- 重点: 没有删除原文本





3.4 插入和附件文本
- 插入命令 i 会在指定行前增长一个新行, 文本会出如今数据流文本的前面。
- 附加命令 a 会在指定行后增长一个新行, 文本会出如今数据流文本的后面。
- 他们不能再单个命令行上使用,必须指定是要将行插入仍是附加到另外一行
- 经过行号指定或区间指定或特殊符号&,能够插入或附加特定的文本行
- $a\ 能够直接附件在文本最后一行
- 要插入或附加多行文本,必需要插入或附加的新文本的每一行使用反斜线
- sed编辑器的模式匹配也适用
格式 :
1 sed '[address] command\
2 new line '







3.5 修改行
- 修改行命令 c 修改数据流中整行文本的内容
- 他们不能再单个命令行上使用,必须指定是要将行插入仍是附加到另外一行
- 在使用行号区间指定时,须要注意是用这一行文本替换数据流中的两行文本,而不是逐一修改这两行文本。
- sed编辑器的模式匹配也适用


3.6 转换行
转换命令 y 是惟一能够处理单个字符的sed编辑器命令。
格式:
1 [address]y/inchars/outchars/
- inchars和outchars 值一对一映射
- inchars中的第一字符会被转换成outchars的第一字符;inchars中的第二字符会被转换成outchars的第二字符;以此列推
- 若是inchars 和outchars的字符长度不符,就会报错
- y命令不是全部系统的sed编辑器都存在的
3.7 打印数据流中的信息
- p命令用来打印文本行, 通常与sed -n 组合使用
- = 命令用来打印行号
- l 命令用来列出行





3.8 使用sed处理文件
- w 命令用来向文件写入行。
- r 命令容许将一个独立文件中的数据插入到数据流中

