常用Linux指令: SED

转自:http://wenku.baidu.com/view/65fc412ced630b1c59eeb51c.html

 

一、sed的处理流程概述

 

 

sed维护着两个数据缓冲区:一个活动的模版空间(pattern space),另一个辅助的保留空间(hold space),初始都是空的,没有数据。

1、sed从输入中读取一行文本,去掉行尾可能的换行符(\n)后放到模版空间里;

2、用指定的执行脚本中的命令依次来处理模版空间里数据,直到脚本结束;

3、向模版空间中的数据尾添加上换行符(没有进行去换行符操作就不添加),显示输出(选项-n将阻止输出) 模版空间中的数据后清空模版空间;

4、sed再读取下一行文本重复上面处理过程。

5、上面的4步处理过程称为一个sed处理循环。而sed就是重复这循环直到遇到退出命令或文件处理完毕。

注意:保留空间中的数据是保持不变的,除非有命令改变它。

 

二、sed中的正则表达式

 

㈠、元字符表

编号

元字符

含义说明

1

*

*前面的那一个正则表达式匹配的结果重复任意次(含0次)。前面的正则表达式可能是一个普通字符,或一个转义的元字符,或一个元字符句点(.),或一个方括号表达式,或一个\(regexp\)。

为了更好的可移植性,在要匹配星号(*)本身时,要用转义字符。

2

\+

与星号(*)相同,只是至少重复1次。是GNU的扩展功能。

3

\?

与星号(*)相同,只是最多重复1次。是GNU的扩展功能。

4

\{i\}

与星号(*)相同,只是重复指定的i次。

i的值必须介于0至RE_DUP_MAX(含)之间。RE_ DUP_ MAX是POSIX定义的符号型常数,可通过getconf命令取得,最小值为255。

5

\{i,j\}

与星号(*)相同,只是重复i至j次。

6

\{i, \}

与星号(*)相同,只是至少重复i次。

7

\(regexp\)

regexp看作一个整体,用于:

1、上面第1到第6项的重复匹配中,如\(abc\)+匹配至少有一个整体abc的字符串。

2、定义后向引用的子表达式。

8

.

匹配任意单个字符。

9

^

匹配模版空间(PATTERN SPACE)开始处的NULL字符串,即任何出现在字符^后面的东西,必须是位于模版空间的开始处才能成功匹配。

只有作为正则表达式的第一个字符或子表达式的第一个字符(在\( 或 \|之后),字符^才有此作用,否则只是普通字符。

为了更好的可移植性,不要在子表达式中使用此功能。

10

$

同字符^类似,只是匹配的是模版空间结束处,只有作为正则表达式的最后一个字符或子表达式的最后一个字符(在\) 或 \|之前),才有此作用,否则只是普通字符。

为了更好的可移植性,不要在子表达式中使用此功能。

11

[list]

[^list]

匹配方括号中的字符列表中的任意一个。

1、第一个字符为脱字符(^),则表示否定匹配,即匹配除字符列表中列出的那些字符以外的所有字符。

2、方括号中的连字符(-):不是第一或最后一个字符时,只表示连续字符的范围(注意:范围会因locale而有所不同,因此不具可移植性),否则作为普通字符进行匹配。

3、要匹配右方括号(])必须将它作为字符列表中的第一个字符。

4、所有其他的元字符都看作为普通字符进行匹配。

5、方括号表达式里可以含有POSIX定义的类字符 ([..][==][::])。

6、当系统没有完全遵守POSIX标准时(即没设置export POSIXLY_CORRECT=true),能识别方括号中含有的,且在GNU对转义字符功能扩展中定义的转义功能,如\n表示换行符;否则不能识别,即\n表示两字符\和n。

12

regexp1\|regexp2

用在相邻的正则表达式之间,表示匹配这些正则表达式中任一个都可以。匹配是从左向右开始的,一旦匹配就不在尝试下一个正则表达式。是GNU的扩展功能。

13

regexp1regexp2

匹配regexp1和regexp2的连接结果。

14

\digit

匹配正则表达式前半部分定义的后向引用的第digit个子表达式。digit为1至9的数字, 1为从左开始。

15

\n

匹配换行符。

16

\meta

将元字符meta转换成普通字符,以便匹配该字符本身,有$ * .[ \^

正则表示式的匹配是贪婪的,即会尽可能地进行最长匹配。

㈡、元字符示例

1、a*b

匹配0个或任意个字符a后接1个字符b的字符串,如:b或aaaab等。

2、a\?b

匹配b或ab

3、a\+b\+

匹配1个或更多个字符a后接1个或更多个字符b的字符串,如:ab或abb或aaab或aabbb等。

4、.*

匹配任意一个字符串,包括空字符串NULL。

5、.\+

匹配至少有1个字符的任意字符串,不包括空字符串NULL。

6、^main(.*)

匹配一个以字符串main(开头,后接任意个任意字符,再接一个字符)的字符串。

7、^#

匹配以字符#开头的字符串。

8、\\$

匹配以字符\结束的字符串。

9、\$

匹配只有1个字符$的字符串。

10、[a-zA-Z0-9]=[[:alnum:]]

匹配只含有字母和数字字符(在C locale)的字符串。

11、[^[:blank:]]\+

匹配不含有空格(space)和水平制表符(tab)的字符串。

12、^\(.*\)\n\1$

匹配由两相同的子字符串组成并用换行符分隔的字符串。

13、^.\{15\}A

匹配1个由16个字符组成的字符串,最后一个一定是字符A。

㈢、sed基本与扩展正则表达式的元字符对应表

基本          扩展

\?            ?

\+            +

\{  \}       {  }

\(  \)       (  )

 

 

三、GNU对转义字符的功能扩展

 

编号

转义字符

功能说明

1

\a

产生或匹配一个BEL字符,响铃作用,ASCII 7 。

2

\f

产生或匹配一个换页字符,ASCII 12 。

3

\n

产生或匹配一个换行字符,ASCII 10 。

4

\r

产生或匹配一个回车字符,ASCII 13 。

5

\t

产生或匹配一个水平Tab字符,ASCII 9 。

6

\v

产生或匹配一个垂直Tab字符,ASCII 11 。

7

\cX

产生或匹配Control-X,X是任意字符。精确结果是:若X是小写字母,就转成对应的大写字母。将X的ASCII值的第7bit位(从右向左)求反:\cz变为x1A,\c{变为x3B,\c;变为x7B

8

\dXXX

产生或匹配一个ASCII码是十进制XXX的字符。

9

\oXXX

产生或匹配一个ASCII码是八进制XXX的字符。

10

\xXX

产生或匹配一个ASCII码是十六进制XX的字符。

11

\w

匹配任意一个单词字符(字母、数字和下划线)。

12

\W

匹配任意一个非单词字符。

13

\b

匹配一个单词的边界符:字符的左边是一个单词字符,并且右边是一个非单词字符,反之亦然。???????

14

\B

匹配除单词边界符外所有字符:字符的左边和右边同时是单词字符或非单词字符。???????

15

\`

匹配模版空间的开头,在多行模式时,不同于字符^。???????

16

\’

匹配模版空间的结束,在多行模式时,不同于字符$。??????

 

 

四、sed脚本中的地址形式

 

sed的地址用于sed命令的前面,表示只有符合指定地址条件的才能执行后面的命令。

1、NUMBER(单一匹配)

只匹配指定号行NUMBER的那一行。

2、FIRST~STEP(递增匹配)      GNU的扩展功能

匹配从起始行FIRST (含)开始,以后行号每增加STEP的正整数倍,就是匹配行。比如要匹配所有奇数行就用1~2即可。

3、$(尾行匹配)

匹配最后一个输入文件的最后一行;若有选项-i-s则匹配每个输入文件的最后一行。

4、/REGEXP/(正则表达式匹配)

匹配成功匹配正则表达式REGEXP的所有行。若REGEXP本身含有斜杠字符(/),则要用转义字符反斜杠(\)进行转义:即\/

一个空的正则表达式(//),表示重复最近的一个非空的正则表达。空的正则表达式不能和调节器(IM)一直使用,即//I//M错误的。

5、\%REGEXP%(正则表达式匹配)

和/REGEXP/功能一样。只是用字符%作为分隔符,而不是字符/,并且可用其他任意一个字符作为分隔符。同样,若REGEXP本身含有指定的分隔符,要对它进行转义。

6、/REGEXP/I或\%REGEXP%I(I正则表达式匹配)      GNU的扩展功能

调节器I表示不区分大小,其余和上面第45项一样

7、/REGEXP/M或\%REGEXP%M(M正则表达式匹配)      GNU的扩展功能

调节器M使正则表达式REGEXP中的元字符^$除了它们原含义的匹配功能外,元字符^$还分别匹配:换行符后的空字符串和换行符前的空字符串。M是代表多行(Multi-line)的含义。

而\` 和 \'总是分别匹配缓冲的开始和结束。

8、NONE(全匹配)

没有指定地址时,即匹配输入文件中的所有行。

9、FIRST,END(区间匹配)

匹配行号从起始行(含)到终止行(含)之间的所有行。

若终止行数值小于等于起始行数值,则只匹配行号等于起始行的一行文本。

若终止行是一个正则表达式(REGEXP),则从起始行的下一行开始匹配这个正则表达式,一旦匹配(含匹配行)就结束,或直到输入数据流结束(若有选项-i-s时就是输入文件尾)。

 

下面是GNU sed支持的地址形式,当然也是GNU的扩展功能:

10、0,/REGEXP/(排除匹配)

这是唯一可以指定行号为0的形式,表示从文件第一行就开始尝试匹配指定的正则表达式,一旦匹配就结束。

11、ADDR1,+N(连续匹配)

匹配ADDR1行及其后连续的N行。

12、ADDR1,~ N(跳跃匹配)

匹配ADDR1行及其后行号是N的倍数的所有行。

13!(反向匹配)

可以在以上12种地址形式加一个惊叹号字符(!),表示反向匹配指定的地址,即匹配那些不在指定地址范围内的行。

注意:

1、不允许指定地址的命令有(即所有行都会执行):

①、:label;②、#;③、}

2、最多能指定一个地址的命令有:

①、=;②、a\;③、i\;④、q ;⑤、Q;⑥、r;⑦、R

3、可指定多个地址的命令有:

①、{;②、b;③、t;④、T;⑤、c\;⑥、d;⑦、D;⑧、h;⑨、H;⑩、g;⑾、G;⑿、l;⒀、n;⒁、N;⒂、p;⒃、P;⒄、s;⒅、w;⒆、W;⒇、y

 

五、SED的调用

 

语法格式:

sed [OPTIONS]... [SCRIPT]  [INPUT-FILE...]

 

功能说明:

若没指定INPUT-FILE或INPUT-FILE是一个连字符(-),sed将对标准输入进行处理;仅当没有用选项-e、 -f、 --expression、或--file中任何一个来用为sed指定一个执行脚本(script)时,第一个非选项的参数就被看作成一个执行脚本,即SCRIPT;剩下的非选项参数才是INPUT-FILE。

相关默认:

1、sed每处理完一行文本后,自动显示模版空间中的内容,选项-n可改变;

2、l(L)命令默认自动换行的长度是70,选项-l N可改变;

3、对输入文件是一个符号连接文件时,默认SED会断开连接,使符号连接的目标文件不会被修改。选项--follow-symlinks-i可改变;????????????会不会处理?

4、默认是用基本正则表达式规则来解释匹配模版,选项-r可改变。

5、默认SED将命令行上指定的多个输入文件看作成一个连续的长数据流处理,选项-s可改变;

 

选项说明:

1、--version

显示sed版本信息后退出。

2、-n   --quiet    --silent

阻止默认输出(显示)模版空间里的数据,此时只输出p命令指定的内容。

3、-e SCRIPT     --expression=SCRIPT

将指定脚本SCRIPT中的命令增加到处理输入文件的命令组中。

4、-f  SCRIPT-FILE     --file=SCRIPT-FILE

将指定脚本SCRIPT-FILE中的命令增加到处理输入文件的命令组中。

5、-i[SUFFIX]     --in-place[=SUFFIX]

将文件放在in-place里编辑处理。GNU是通过创建一个临时文件,并将SED的输出送到此文件,而不是送到标准输出的方式来实现。应用于命令:=acilp中,但同时还可用命令wW及将输出文件指定为/dev/stdout,实现SED的输出也同时送到标准输出。

此选项已隐含了另一选项-s。i与SUFFIX之间不能有空格

一个文件处理完时,SED将创建的临时文件名换成输出文件的原名(即被处理的输入文件名)。若指定有后缀SUFFIX,则会先将旧文件换名成SUFFIX后缀而形成备份;否则旧文件被覆盖而无备份。

换名规则是:若SUFFIX不含有星号(*),将SUFFIX作为后缀直接追加在旧文件名后;否则,SUFFIX中的每个星号(*)都被旧文件名取代。好处是:还允许为备份文件指定前缀,而不仅仅是后缀,甚至将可备份放到另一个目录中(目录必须已存在)

6、-l N       --line-length=N

指定l(L)命令自动换行的长度为N,0表示不对长行进行自动换行处理,默认是70。

7、--posix

取消GNU对POSIX sed的扩展功能,即只有标准POSIX sed功能。若只想取消最近的GNU扩展功能,可将变量POSIXLY_CORRECT设置成一个非空的值。

8、-b      --binary

对所有系统都可用,但只对像DOS、Windows和Cygwin这些将文本类型文件和二进制类型文件区别存贮的系统才作用:SED将输入文件以二进制模式打开,就不必处理文本文件行尾的回车符了。

9、--follow-symlinks

只在支持符号连接的系统中,并且同时用选项-i时才有作用:若指定的输入文件是一个符号连接,SED会处理符号连接的目标文件,并保持连接。默认SED会断开连接,使符号连接的目标文件不会被修改。

10、-r      --regexp-extended

用扩展正则表达式规则来解释匹配模版。

11、-s      --separate

默认SED将命令行上指定的多个输入文件看作成一个连续的长数据流处理。用这个GNU的扩展选项,SED将会看作各个独立的文件来处理,但注意的是:指定的地址范围不能跨度到其他文件;显示的行号都是相对于各自文件的首行;字符$会指示每个文件的最后一行;来自R命令的调用文件对每个输入文件都会重新执行一次。

12、-u      --unbuffered

对输入和输出都根据实际,尽可能小地进行缓冲处理,或不缓冲。这对SED命令的输入是来自类似于命令tail –f,而你又想尽可能快地看到处理后的输出,是特别有用的。

 

 

六、sed的6个常用命令

 

㈠、#

注释命令,不允许有sed地址。用于对sed脚本的注解和说明,此字符后内容即为注释直到行尾。

1、有些版本的sed只允许脚本有一行注释,且必须是第一行,即脚本的第一个字符必是#。

2、当sed脚本的前两个字符是#n时,表示强制打开选项-n(不自动显示);同时考虑上面要求,注释若是以#n开始的,必须改成#N或# n的形式。

㈡、q  [exit-code]

退出命令,只接受单一匹配的sed地址。表示退出sed,不再处理任何命令或输入,若没有选项-n,在退出前会显示当前模版空间中的数据。

退出并返回指定的退出代码,是GNU的扩展功能。

㈢、d

删除命令,清空模版空间中的数据,立即开始sed下一处理循环。

㈣、p

显示命令,作用是显示模版空间的数据,通常和命令行选项-n同时使用。

㈤、n

新行命令,作用是显示模版空间的数据(无选项-n时)后,sed立即读取新的一行来取代模版空间的数据,此时若没有待输入行了,sed直接退出,不再处理任何命令。

㈥、{ commands }

组命令。作用是将多个命令用字符对({})括起来,形成一组命令。常用在多个命令要对相同sed地址行进行处理时。

 

七、sed的s命令

 

㈠、语法格式

s/Regexp/Replacement/Flags

分隔字符/可以用其他任意一个单字符代替,若在Regexp或Replacement中有分隔字符,必须要进行转义操作。

㈡、功能说明

命令s可能是sed最重要的命令,基本功能就是:用指定的Regexp试图匹配模版空间中的数据,若成功,就用指定的Replacement替换模版空间中匹配的部分。

㈢、替换选项说明

1、\n

替换正则表达式Replacement中可含有后向引用中的\n(n是1至9),引用前面定义的子表达。

2、&

代表模版空间中的整个匹配部分。

3、\L      GNU的扩展功能

将在其后的替换部分转换成小写字母,直到发现一个\U或\E。

4、\l      GNU的扩展功能

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

5、\U      GNU的扩展功能

将在其后的替换部分转换成大写字母,直到发现一个\L或\E。

6、\u      GNU的扩展功能

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

7、\E      GNU的扩展功能

停止由\L或\U指示开始的大小写转换。

所以替换正则表达式Replacement中要含有字符\&或字符串\n的本身,必须要进行转义操作,即变成:\\、\&和\\n的形式。

注意:

为什么在Replacement中不用重复元字符:\+、\?、\{、\}

㈣、标志选项说明

1、g

将用Replacement替换模版空间中所有匹配Regexp的部分,则不仅仅是第一个匹配部分。

2、Number

只用Replacement替换模版空间中第Number个匹配Regexp的部分。

注意:对于同时使用g和Number时,POSIX标准没有说明会如何处理,现在也没有广泛的一致。GNU sed规则是:忽略第Number个前的所有匹配部分,而替换第Number个(含)后的所有匹配部分。

3、p

若发生了替换操作,指示显示模版空间中新的数据。

当同时使用选项p和e时,两者前后顺序不同会产生不同的结果:ep表示先执行替换后的模版空间中可能发现的Shell命令,再显示模版空间中的数据(可能已经是执行命令的结果了);pe表示先显示替换后的模版空间中的数据,再执行模版空间中(替换后的)可能发现的Shell命令。

对于目前的GNU sed:不管两者顺序,在执行选项e的前后,都会执行一次选项p,即显示两次。但以后版本的sed可能会改变。另外选项p与其他选项(除e外)同时使用时,只会执行一次。

4、w File-name

若发生了替换操作,指示将模版空间中新的数据写入指定的文件File-name中。

GNU支持两个特殊文件:/dev/stderr,即将结果写到标准错误输出中;/dev/stdout,即将结果写到标准输出中,这等同于p命令,除非sed调用时用了选项-i

5、e     GNU的扩展功能

允许将来自Shell命令的输出通过管道输入到模版空间。

在发生一个替换时,在模版空间中被发现的Shell命令会被执行,并用执行结果取代模版空间中的数据,会自动去掉执行结果尾部的换行符。当被执行的命令包含NUL字符时,结果是没有定义的。

6、I或 i     GNU的扩展功能

表示进行Regexp匹配时,是不区分大小写字母的。

7、M 或m     GNU的扩展功能

调节器M使正则表达式Regexp中的元字符^$除了它们原含义的匹配功能外,元字符^$还分别匹配:换行符后的空字符串和换行符前的空字符串。M是代表多行(Multi-line)的含义。

而\` 和 \'总是分别匹配缓冲的开始和结束。

 

七、sed的16个不常用命令

 

1、y/Source-chars/Dest-chars/

分隔字符/可以用其他任意一个单字符代替,若在Source-chars或Dest-chars中有分隔字符、反斜杠(\)或换行符(\n),必须都要进行转义操作。

源字符列表和目标字符列表的字符数目必须相等(除去转义符反斜杠后)。功能是:将模版空间中所有的出现在源字符列表中的字符替换目标字符列表中对应位置的字符。

2、a\       GNU的扩展功能

Text

追加命令。在当前sed处理循环完成时(加在模版空间的后面),在当前sed处理循环没完成,但在读取下一输入前(加在模版空间的前面),将文本Text内容,追加到输出中。

文本Text要求除了最后一行,每行都必须以反斜杠(\)结束,反斜杠会自动除去;在文本中间的反斜杠会作为转义字符处理,故以反斜杠开始的转义序列也会处理,即\\表示一个\字符。

在GNU中,命令a和它后必须的\(代表换行符)之间是可以其他文本的,从命令a后面的第一个非空白字符开始将作为Text的输出第一行。

3、i\       GNU的扩展功能

Text

插入命令。立即将文本Text内容输出,且要插入在当前sed处理循环的输出前。

文本Text要求和命令a一样。

在GNU中,命令i和它后必须的\(代表换行符)之间是可以其他文本的,从命令i后面的第一个非空白字符开始将作为Text的输出第一行。

4、c\

Text

更改命令。删除匹配指定地址的模版空间内容,将文本Text内容输出在最后一个匹配地址位置(若没成功匹配最后一个地址,则删除所有的,但什么也不输出);没有指定地址时,则会删除每行的模版空间内容,而在每行位置输出文本Text内容。

此命令在组命令中({ })时,输出方式完全不一样了:删除匹配指定地址的模版空间内容,但会在每行的位置输出文本Text内容,而不是在最后一行输出一次。

此命令完成后,会立即开始下一个sed处理循环(模版空间内容已被删除),所以必须为此命令指定适当的匹配地址,或在命令前有适当的跳转命令(b、t或T),否则此命令后的所有命令可能不会被执行。

文本Text要求和命令a一样。

在GNU中,命令c和它后必须的\(代表换行符)之间是可以其他文本的,从命令c后面的第一个非空白字符开始将作为Text的输出第一行。

5、=      GNU的扩展功能

显示当前输入行的行号,并自动换行。

6、l  [n]

用明确的形式显示模版空间的数据:

①、以C-style的转义形式显示不能打印的字符(换行符、制表符等)和本身的\Char形式;

②、长的行将进行分割,以字符\结尾的行表示分割,以字符$结尾的行表示分割结束。

③、n指定显示行的长度,超过就进行分割;若为0表示不分割所有行;没有指定时就取命令行选项-l的设置,再没有就取默认值70。这是GNU的扩展功能。

7、r  Filename    GNU的扩展功能

在当前循环(即处理当前模版空间的过程)结束时,或当前循环没处理完,在读取下一输入行前时,将文件Filename的内容排成队列(不是一行,还是原来的多行格式)、读取并插入到输出流。注意,若文件Filename不能读取,就当作是一个空文件,是没有任何错误提示的。

在GNU sed中,文件可以是/dev/stdin,表示读取标准输入中内容。

8、w  Filename

将模版空间中的数据写入指定的文件Filename(在读取第一行输入前就创建了)中。

所有的w命令,包括s命令中的标志选项w,指向相同的文件Filename时,是不要关闭和再打开文件进行输出的。

GNU支持两个特殊文件:/dev/stderr,即将结果写到标准错误输出中;/dev/stdout,即将结果写到标准输出中,这等同于p命令,除非sed调用时用了选项-i

9、D

当模版空间中不含有换行符(\n)时,则会像常用命令d    一样先清空模版空间的数据后,立即开始sed的下一个处理循环;否则,先从开头删除模版空间的数据直到第一个换行符(),再重新开始对总的模版空间中数据处理一次,但不从输入中读取新一行。

10、N

先向模版空间增加一个换行符(\n),再将待输入的下一行追加到模版空间中。若没有输入行追加,则sed就退出,不再处理任何命令。

11、P

显示模版空间中的数据直到第一个换行符(\n)为止。

12、h

用模版空间中的数据替换保留空间中的数据。

13、H

在保留空间的数据后追加一个换行符(\n)后,将模版空间中的数据再追加到保留空间中。

14、g

用保留空间中的数据替换模版空间中的数据。

15、G

在模版空间的数据后追加一个换行符(\n)后,将保留空间中的数据再追加到模版空间中。

16、x

交换模版空间和保留空间中的数据。

 

八、sed的3个编程命令

 

1、:Label

不允许有地址。无空格。

在分支命令的位置前指定标签Label,是没有操作指令的。

2、b  [Label]

无条件地跳到分支Label的位置。省略Label时,立即开始(无选项-n时,会先显示模版空间)下一个sed处理循环。

3、t  [Label]

仅当分支条件符合时,或自从读取上一输入行后有过一次成功替换时,就跳到分支Label的位置。省略Label时,立即开始(无选项-n时,会先显示模版空间)下一个sed处理循环。

九、GNU sed的9个扩展命令

1、e  [Command]

允许将来自Shell命令的输出通过管道输入到模版空间。

①、没有指定Command时,在模版空间中被发现的Shell命令会被执行,并用执行结果取代模版空间中的数据,会自动去掉执行结果尾部的换行符。这类似于s命令的标志选项e功能。

②、指定Command时,就执行Command,并像r命令那样,将执行结果送到输出流;这个命令可以跨度多行,除了最后一行,每行要以一个反斜杠(\)结尾。

上面两种情况中,当被执行的命令包含NUL字符时,结果是没有定义的。

2、F

显示当前输入文件的文件名,会自动进行换行。

3、L  n

在将来的版本中会删除此命令。

4、Q  [Exit-code]

只接受单一匹配的sed地址。表示退出sed,不再处理任何命令或输入,一定不前会显示当前模版空间中的数据。若指定了退出代码,则返回它。

5、R  Filename

在当前循环(即处理当前模版空间的过程)结束时,或当前循环没处理完,在读取下一输入行前时,将文件Filename的内容排成一行、读取并插入到输出流。注意,若文件Filename不能读取,就当作是一个空文件,是没有任何错误提示的。

在GNU sed中,文件可以是/dev/stdin,表示读取标准输入中一行内容。

6、T  Label

仅当分支条件符合时,或自从读取上一输入行后没有过一次成功替换时,就跳到分支Label的位置。省略Label时,立即开始(无选项-n时,会先显示模版空间)下一个sed处理循环。

7、v  [Version]

用来验证是否支持GNU sed的扩展功能,若不支持将使sed失败。同时,还可指定脚本要求的sed版本Version,如4.0.5,默认是4.0。

这命令会启用所有GNU的扩展功能,即使用环境变量POSIXLY_CORRECT取消也行。

8、W  Filename

将从模版空间的开始直到第一个换行符的数据写入文件Filename,其他的同命令w一样。

9、z

清空模版空间的内容,基本等同于命令s/.*//的作用,但比后者更有效、更可靠。

POSIX规定:元字符句点(.)是不能匹配不合法的多字节序列。所以,在大多数多字节地区(包括UTF-8地区),不能在脚本中实现可移植的清空sed缓冲区的方法。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值