sed用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、sed的处理流程概述: (2)

二、sed中的正则表达式: (2)

㈠、元字符表 (2)

㈡、元字符示例 (3)

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

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

四、sed脚本中的地址形式 (4)

五、SED的调用 (5)

六、sed的6个常用命令 (7)

㈠、# (7)

㈡、q [exit-code] (7)

㈢、d (7)

㈣、p (7)

㈤、n (7)

㈥、{ commands } (7)

七、sed的s命令 (7)

㈠、语法格式 (7)

㈡、功能说明 (7)

㈢、替换选项说明 (7)

㈣、标志选项说明 (8)

七、sed的16个不常用命令 (8)

八、sed的3个编程命令 (10)

九、GNU sed的9个扩展命令 (10)

十、sed脚本,即sed程序 (11)

脚本范例说明: (11)

参考和部分摘自/software/sed/manual/sed.html

wget /gnu/sed/sed-4.2.1.tar.gz

一、sed的处理流程概述:

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

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

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

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

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

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

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

二、sed中的正则表达式:

㈠、元字符表

㈡、元字符示例

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对转义字符的功能扩展

四、sed脚本中的地址形式

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

1、NUMBER(单一匹配)

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

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

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

3、$(尾行匹配)

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

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

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

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

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

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

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

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

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、或--fil e中任何一个来用为sed指定一个执行脚本(script)时,第一个非选项的参数就被看作成一个执行脚本,即SCRIPT;剩下的非选项参数才是INPUT-FILE。相关默认:

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

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

3、对输入文件是一个符号连接文件时,默认SED会断开连接,使符号连接的目标文件不会被修改。

相关文档
最新文档