命令格式

sed命令的格式如下:sed option script file,option如下:

(1)-e script:在处理输入时,将script中指定的命令添加到运行的命令中,实际上就是使用多个选项;

Shell:sed流编辑器_sed

(2)-f file:在处理输入时,将file中指定的命令添加到运行的命令中;

Shell:sed流编辑器_sed_02

(3)-n:不为每个命令生成输出,等待print来输出;

(4)-i: 将替换结果用于原文件

Shell:sed流编辑器_sed_03

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

替换字符:s/pattern/replace/flags

替换文本内容,有4种可用的flags:

(1)默认是替换第一个匹配的字符;

(2)数字,表明新文本将替换第几处模式匹配的地方;

(3)g,表明替换所有的地方;

(4)p,表明原来的行内容要打印出来;

(5)w file,将替换结果写入原文件。

Shell:sed流编辑器_sed_04

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

移除字符:/pattern/d 移除pattern

很简单的移除空白行:

Shell:sed流编辑器_字符串_05

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

使用地址

默认情况下,sed编辑器中使用的命令会作用与文本的所有行,如果只想将命令作用域特定某行,必须使用行寻址。在sed编辑器中有两种形式的行寻址:

(1)行的数字范围

(2)用文本模式来过滤出某些行

两种方法都使用相同的格式来指定地址:[address]command

===================================================================

数字方式的行寻址

当使用数字方式的行寻址时,可以用它们在文本流中的行位置来引用行。sed会将第一行分配为1,后面按顺序为新行分配行号。

-------------------------------

测试文件内容:

Shell:sed流编辑器_正则表达式_06

测试的命令如下:

Shell:sed流编辑器_正则表达式_07

注意两点:

(1)n,m表示的是n~m行

(2)$表示的是结尾的行,2~$表示从第二行到结尾

===============================================================================

文本模式过滤器

sed编辑器允许指定文本模式来过滤出命令要作用的行,格式如下:/pattern/command

Shell:sed流编辑器_数据_08

很容易看懂,/2/用来匹配出现2的行,然后对该行作用命令s/chen/jiang/

================================================================================

组合命令

使用{}将多条命令组合在一起,可以在单行上执行多条命令。

Shell:sed流编辑器_寻址_09

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

删除行

删除命令d名副其实,它会删除匹配指定寻址模式的所有行。

===============================================================================

(1)删除指定范围行

Shell:sed流编辑器_字符串_10

(2)删除匹配行

Shell:sed流编辑器_数据_11

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

插入和附加文本

(1)插入(insert)命令i会在指定行的前面增加一个新行;

(2)追加(append)命令a会在指定行的后面增加一个新行;

不能在单个命令上使用这两条命令,必须指定是要将行插入还是附加到另一行,格式如下:

sed '[address]command\ new line'

=========================================================

Shell:sed流编辑器_字符串_12

如果更加复杂的匹配如下:

Shell:sed流编辑器_寻址_13

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

修改行

修改允许修改数据中整行文本的内容,和插入附加的机制一样,如下:

Shell:sed流编辑器_数据_14

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

字符映射

转换(y)命令是唯一可以处理单个字符的sed编辑命令。转换命令的格式如下:

[address]y/inchars/outchars/

转换命令会对inchars和outchars值进行一对一的映射。

Shell:sed流编辑器_正则表达式_15

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

回顾打印

有三种方式来打印数据流中的信息:

(1)p:打印文本行

Shell:sed流编辑器_数据_16

===============================================================================

(2)=:打印行号

Shell:sed流编辑器_数据_17

===============================================================================

(3)l:列出行

列出命令l允许打印数据流中的文本和不可打印的ASCII字符。

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

多行命令

多行命令允许你跨越多行来执行特定的操作。sed编辑器包含了3个可用来处理多行文本的特殊命令。

(1)N:将数据流中的下一行加进来创建一个多行组的处理;

(2)D:删除多行组中的一行;

(3)P:打印多行组中的一行。

==============================================================================

next命令

------------------------------

单行next

小写n会告诉sed移动到数据流的下一行文本,而不用回到命令最开始再执行一遍。可以来感受下下面的区别。

Shell:sed流编辑器_正则表达式_18

================================================================================

合并文本行

===============================================================================

(6)& 代表已匹配的字符串

Shell:sed流编辑器_sed_19

================================================================================

(7)子串匹配标记 \(pattern\) \n,非常的重要

Shell:sed流编辑器_数据_20

两个\(pattern\)之间需要空格 这个非常的重要,可以直接忽略一部分而只选择其中某一部分

===============================================================================

================================================================================

(9)引用 当使用变量是用双引号

Shell:sed流编辑器_数据_21