sed结构分析
时间:2009-08-13 来源:yy_galois
sed/awk教程众多,大多是实例教材,以举例为主;或者是语法教材,以语法讲解为主。学习了sed,又学习awk,结果学着学着,很容易迷糊,语法容易混淆。
本文主要讲解sed的结构,使大家学习完以后对sed有一个整体性的把握。
至于什么叫做结构,看完应该可以明白。
本人sed/awk所学有限,错误之处请大家不吝指出。
1: sed 语法
sed -e 'pattern + action' textfile
意思:对于一个文本文件textfile,用pattern去匹配,找到匹配的字符串的一行或者多行,copy到pattern space中,然后对pattern space中的文本执行action。
执行完action以后,接着从textfile的当前行的下一行开始,继续使用pattern去匹配,继续copy到pattern space中,继续执行action,直到结束。
解释点1:由于匹配的字符串是拷贝到pattern space中,action是对pattern space中的字符串操作,所以不会英想到原文本文件。
详细过程:
**sed执行过程:
a. 如果已到达文件尾,goto e;否则,用pattern去匹配,找到匹配的字符串的行,copy到pattern space中,然后对pattern space中的文本执行action。
b. 执行命令序列,命令只对模式空间有效;
c. 当前行号加1
d. goto a;
e. 退出
2:pattern -- 行(基本单位)与字符串匹配(基本动作)的组合
sed称为“行编辑器”,每当sed看见一个文本,在它心中,这个文本就是用换行符隔开的一行一行一直到无穷行。
在sed眼中,文本的基本单位只有一种,那就是行。这些行分别编号为1,2,3,4,5,6,... $。
行只有一个动作,那就是这个行匹配某字符串序列或者不匹配某字符串序列。
组合起来,于是有以下几种pattern。
a. A行做某事 sed -e '3d' textfile
b. A行到B行做某事 sed -e '3, 5d' textfile
c. 匹配某字符串序列的某行 sed -e '/www/d' textfile
d. 匹配字符串“你好”到“此致敬礼”一段文本的许多行 sed -e '/你好/,/此致敬礼/p' textfile
e. 匹配从A行开始,到“此致敬礼”一段文本 sed -e '3,/此致敬礼/p' textfile
f. 匹配从“你好”开头,到B行结束的一段文本 sed -e '/你好/, 10p' textfile
3: action
常用action,相关的文档许多,诸位可以从网上查找。
需要说明的是
a. hold space和pattern space。
把匹配的字符串拷贝到了pattern space中,接着可以对pattern space执行动作。
如果我们在处理这个pattern space中的内容以前,必须先处理一些其它事情,也就是操作对象有两个或者两个以上,那么一个buffer显然是不够的。
所以引入了hold space。
b. s/regexp/replacement/ 可以看作是 /regexp/s/regexp/replacement/
好了,剩下的是把sed所有action学习明白,你就能够对sed应用自如了。
本文主要讲解sed的结构,使大家学习完以后对sed有一个整体性的把握。
至于什么叫做结构,看完应该可以明白。
本人sed/awk所学有限,错误之处请大家不吝指出。
1: sed 语法
sed -e 'pattern + action' textfile
意思:对于一个文本文件textfile,用pattern去匹配,找到匹配的字符串的一行或者多行,copy到pattern space中,然后对pattern space中的文本执行action。
执行完action以后,接着从textfile的当前行的下一行开始,继续使用pattern去匹配,继续copy到pattern space中,继续执行action,直到结束。
解释点1:由于匹配的字符串是拷贝到pattern space中,action是对pattern space中的字符串操作,所以不会英想到原文本文件。
详细过程:
**sed执行过程:
a. 如果已到达文件尾,goto e;否则,用pattern去匹配,找到匹配的字符串的行,copy到pattern space中,然后对pattern space中的文本执行action。
b. 执行命令序列,命令只对模式空间有效;
c. 当前行号加1
d. goto a;
e. 退出
2:pattern -- 行(基本单位)与字符串匹配(基本动作)的组合
sed称为“行编辑器”,每当sed看见一个文本,在它心中,这个文本就是用换行符隔开的一行一行一直到无穷行。
在sed眼中,文本的基本单位只有一种,那就是行。这些行分别编号为1,2,3,4,5,6,... $。
行只有一个动作,那就是这个行匹配某字符串序列或者不匹配某字符串序列。
组合起来,于是有以下几种pattern。
a. A行做某事 sed -e '3d' textfile
b. A行到B行做某事 sed -e '3, 5d' textfile
c. 匹配某字符串序列的某行 sed -e '/www/d' textfile
d. 匹配字符串“你好”到“此致敬礼”一段文本的许多行 sed -e '/你好/,/此致敬礼/p' textfile
e. 匹配从A行开始,到“此致敬礼”一段文本 sed -e '3,/此致敬礼/p' textfile
f. 匹配从“你好”开头,到B行结束的一段文本 sed -e '/你好/, 10p' textfile
3: action
常用action,相关的文档许多,诸位可以从网上查找。
需要说明的是
a. hold space和pattern space。
把匹配的字符串拷贝到了pattern space中,接着可以对pattern space执行动作。
如果我们在处理这个pattern space中的内容以前,必须先处理一些其它事情,也就是操作对象有两个或者两个以上,那么一个buffer显然是不够的。
所以引入了hold space。
b. s/regexp/replacement/ 可以看作是 /regexp/s/regexp/replacement/
好了,剩下的是把sed所有action学习明白,你就能够对sed应用自如了。
相关阅读 更多 +