sed & awk 阅读笔记之sed(转)
sed和awk的重要性不用多言,在linux下写bash 脚本很难不用到这两个文本处理利器。
一直以来都只是浅显的用到一些皮毛,没有系统的学习过。
这样造成的结果是经常遇到一些没见过的语法,然后去google上搜,这样很影响读写脚本的速度
于是下定决心系统学习一下sed和awk
参考的书籍就是o’reilly出版社的sed和awk
本篇是sed中的一些基本概念
1.三个基本概念
在一个脚本里的command按顺序作用于输入的每一行
脚本将作用于所有的行,除非通过address限定其只作用于特殊的行
原始的输入内容不会改变,command改变的仅是一个备份
2.pattern space和hold space
pattern space是sed内部维护的一个buffer,脚本在被处理过程中
首先,将一行文本读入pattern space
然后,command依次作用于pattern space
最后,pattern space内容输出,读入下一行文本
hold space是另外一个缓冲区,可以将pattern space的内容存在里面,以后取出
3.address
非常重要的概念,格式如下:
[address[,address]][!]command [arguments]每个command可以指定0,1,2个地址
指定0个地址,那么该command作用于所有行
指定1个地址,command作用于匹配该address的行
指定2个地址,例如地址a,b,那么首先找到匹配a的行,作用于该行之后的所有行,直到匹配b的行为止。
4.address和行是如何匹配的
有两种方式:
第一种是行号,例如2d,则表示删除第2行,d是表示删除的command,以后会详细说
特别的,$表示最后一行
第二种是正则表达式,以/****/格式出现,****是正则表达式的内容
此外,如果一个地址后跟着一个”!”,command将作用于除匹配行之外的所有行
5.multi command
利用{}将commands括起来,从而对该行执行多个命令,例如
/^.TS/,/^.TE/{
/^$/d
s/^.ps 10/.ps 8/
s/^.vs 12/.vs 10/
}
需要注意的是, “{”必须在每行的末尾, “}”必须单独占一行
6.sed的执行方式
sed [-n][-e] `command’ file(s)
sed [-n] -f scriptfile file(s)
一直以来都只是浅显的用到一些皮毛,没有系统的学习过。
这样造成的结果是经常遇到一些没见过的语法,然后去google上搜,这样很影响读写脚本的速度
于是下定决心系统学习一下sed和awk
参考的书籍就是o’reilly出版社的sed和awk
本篇是sed中的一些基本概念
1.三个基本概念
在一个脚本里的command按顺序作用于输入的每一行
脚本将作用于所有的行,除非通过address限定其只作用于特殊的行
原始的输入内容不会改变,command改变的仅是一个备份
2.pattern space和hold space
pattern space是sed内部维护的一个buffer,脚本在被处理过程中
首先,将一行文本读入pattern space
然后,command依次作用于pattern space
最后,pattern space内容输出,读入下一行文本
hold space是另外一个缓冲区,可以将pattern space的内容存在里面,以后取出
3.address
非常重要的概念,格式如下:
[address[,address]][!]command [arguments]每个command可以指定0,1,2个地址
指定0个地址,那么该command作用于所有行
指定1个地址,command作用于匹配该address的行
指定2个地址,例如地址a,b,那么首先找到匹配a的行,作用于该行之后的所有行,直到匹配b的行为止。
4.address和行是如何匹配的
有两种方式:
第一种是行号,例如2d,则表示删除第2行,d是表示删除的command,以后会详细说
特别的,$表示最后一行
第二种是正则表达式,以/****/格式出现,****是正则表达式的内容
此外,如果一个地址后跟着一个”!”,command将作用于除匹配行之外的所有行
5.multi command
利用{}将commands括起来,从而对该行执行多个命令,例如
/^.TS/,/^.TE/{
/^$/d
s/^.ps 10/.ps 8/
s/^.vs 12/.vs 10/
}
需要注意的是, “{”必须在每行的末尾, “}”必须单独占一行
6.sed的执行方式
sed [-n][-e] `command’ file(s)
sed [-n] -f scriptfile file(s)