Linux下sed,awk,grep,cut,find等常用命令介绍(2)

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

关于sed的hold space(内存缓冲区)和pattern space(模式空间)

sed在处理文件的时候,每一行都需要存放在一个叫“模式空间”的临时缓存区。每处理完一行,便清理一次(pattern space),并把下一行再次放入该临时缓冲区。

而保留空间(hole space),是当sed用到h命令的时候,把匹配的模式放在一个叫做"hold buffer"的保留缓冲里,但需要使用G(sed的取得命令)的时候,sed 从这个保留空间(hold space)中取得。

sed 是以行为单位进行读取,读取后的内容存放在pattern space。

holding space是通过h,H,x,g,G命令和pattern space产生关连,利用这5个特性可以辅助pattern space解决问题。


g

表示行内全面替换,当前处理行进行全局替换。


G

获得内存缓冲区的内容,并追加到当前模板块文本的后面。
函数参数G 与g 唯一差别是, sed执行g 时, 数据盖掉(overwrite) pattern space 内原来的数据
而G , 数据则是"添加(append)" 在pattern space 原来数据后。


‘;’号

如果在一行中有多个命令,要用分号隔开。


s/re/string

用string替换正则表达式re。


d

从模板块(Pattern space)位置删除行。

函数参数d 表示删除数据行, 其指令格式如下:
[address1[ ,address2]] d

对上述格式有下面几点说明:
函数参数d 最多与两个地址参数配合。

sed执行删除动作情况如下:
将pattern space 内符合地址参数的数据删除。
将下一笔资料读进pattern space 。
重新执行sedscript。
n

读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

函数参数n 表示读入下一行资料。
其指令格式如下:
[address1[ ,address2]] n
对上述格式有下面几点说明:
函数参数n 最多配合两个地址参数。

sed执行读入下一行动作的情况如下:
输出在pattern space 的数据。
将下一笔资料读到pattern space。
执行下一个编辑指令。


-n, --quiet, --silent

安静模式,取消默认输出。


x

交换pattern和hold space


p

打印模式空间的行,通常 p 会与参数 sed -n 一起使用


N

追加下一行数据到模式空间,数据行间以换行字符(embedded newline character)分隔。

函数参数N 表示添加下一笔资料在pattern space 内。
其指令格式如下:
[address1 ,[address2]] N
对上述格式有下面几点说明:
函数参数N 最多配合两个地址参数。

sed执行时, 将下一行数据读入并添加在pattern space 内, 数据行间以换行字符(embedded newline character)分隔。
此外, 在替换时, 换行字符可用\n 来match。


=

打印当前行号


.

匹配一个非换行符的字符


h

拷贝模板块的内容到内存中的缓冲区。


!

表示后面的命令对所有没有被选定的行发生作用。


$

锚定行的结束 如:/sed$/匹配所有以sed结尾的行。也可以表示文件最后一行。


1

表示文件第一行


-e

直接在指令列模式上进行 sed 的动作编辑,允许多台编辑。


:label

表示建立一个标签label


b

跳转命令,这个命令是无条件跳转
ba表示跳转到标签a处


q

退出Sed。


D

删除模板块的第一行。

函数参数D 与d 的比较如下:
当pattern space 内只有一数据行时, D 与d 作用相同。
当pattern space 内有多行资料行时D 表示只删除pattern space 内第一行资料; d 则全删除。
D 表示执行删除后, pattern space 内不添加下一笔数据, 而将剩下的数据重新执行sedscript ; d 则读入下一行后执行sedscript。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21316.html