天天看点

sed

sed: 非交互,不可逆转    应用每行,作用全局

vi   : 交互,直观

sed命令行选项===========================

简单命令:sed -e

脚本文件:sed -f

阻止自动输出,指令操作行执行打印命令p:sed -n

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

sed对操作的文件的一行依次执行脚本中的命令,对一行执行所有命令后再对操作文件的下一行操作。一个命令的结果会成为下一条命令的输入。即sed总是在处理原始行的最新形式。

如下面的例子

[talenhao@BJB0300 tmp]$ touch 1.txt

[talenhao@BJB0300 tmp]$ echo a> 1.txt 

[talenhao@BJB0300 tmp]$ touch sed 

[talenhao@BJB0300 tmp]$ vim sed

[talenhao@BJB0300 tmp]$ sed -f sed 1.txt 

c

模式空间:sed操作缓冲区 前一个命令的处理结果会做为后一个命令的处理内容.

sed 默认是全局透视寻址.

sed
正则必须封闭在//中

$在正则中表示行尾,在sed中表示最后一行。/^$/正则中还是表示一行的结尾。

地址有两人种:行地址与模式地址

地址也可以是两个正则表示:/正则/,/正则/命令

sed

感叹号!加在地址后操作命令前用于反转操作

/正则/,/正则/!命令

分组操作

地址与命令可以使用{}进行分组操作。

sed

sed命令集有25个命令,常用的编辑命令有4个(caid),d(删除),a(追加),i(插入),c(修改)。

地址命令

[address]command

[line-address]command

address{

  command

  [address]command

  ...

}

address{command; command;command;...

替换操作:s

    [address]s/pattren/replacement/flags

sed

删除操作d

/regular/,/regular/command

插入操作i,追加操作a(不可处理一个范围)

/regular/command\

内容

       插入与追加操作不影响模式空间,即模式空间的行计数不变.

修改操作c(可处理一个范围)

/regular/,/regular/command\

       当修改操作作用于一封闭大括号并作用于一个范围时,将产生相同于范围行数的输出.

sed

列表(l)

        用于显示模式空间的内容,包括不可见字符

转换(y)

        [address]y/abc/xyz/

打印(p)

        打印命令不同于替换命令中的p,后者是以成功替换为条件的.

下一步(next):n

        较难理解,待深入学习

    在执行next后,控制将被传递给后序命令.

读写文件

        [line-address]r file

        [address]w file

    [line-address]是要操作的文件行号,将file的内容追加到指定行号之后.

sed的高级命令:

        多行模式空间 PDN