sed用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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会断开连接,使符号连接的目标文件不会被修改。