|
导航:[首页]->[bash]->[sed学习笔记]
##概述
Sed 命令列可分成编辑指令与文件档部份。 编辑指令负责控制所有的编辑工作; 文件档表示所处理的档案。sed 的编辑指令均由位址(address)与函数(function)两部份组成,在执行时,sed利用它的位址参数来决定编辑的对象;而用它的函数参数编辑。
sed 编辑指令 , 除了可在命令列上执行 , 也可在档案内执行。其中差别只是在命令列上执行时 , 其前必须加上选项 -e ; 而在文件内时 , 则只需在其文件名前加上选项 -f。另外 , sed 执行编辑指令是依照它们在命令列上或档内的次序。
sed -e '编辑指令1' -e '编辑指令2' ... 文件档
cat doc | sed -e '1,10d' -e 's/yellow/black/g'
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
##pattern space&hold space
- pattern space(模式空间)相当于车间sed把流内容在这里处理;
- hold space(保留空间)相当于仓库,加工的半成品在这里临时储存(当然加工完的成品也在这里存储)。
先读入一行,去掉尾部换行符,存入pattern space,执行编辑命令。处理完毕,除非加了-n参数,把现在的pattern space打印出来,在后边打印曾去掉的换行符。把pattern space内容给hold space,把pattern space置空。接着读下一行,处理下一行。
pattern spaces初始为空,直到匹配第一行。
##位址
位址参数表示法要编辑的资料行 , 用它们的行数或其中的字串来代替表示它们。
位址为十进位数字 : 此数字表示行数。当指令执行时 , 将对符合此行数的资料执行函数参数指示的编辑动作。例如 ,删除文件中的第 15 行 , 则指令为 15d。
位址为 正则表达式 :当资料行中有符合正则表达式所表示的字串时 , 则执行函数参数指示的编辑动作。另外 , 在正则表达式前后必须加上 “/”。例如指令为 /t.*t/d , 表示删除所有含两 “t” 字母的资料行。
####位址选项
- NULL:若不存在,将匹配所有行
- N:匹配特定行N,例如sed -e 1d
- M,N:匹配M行到N行(包括第M和N行),例如sed -e 1,3d
- M~N: 从M行开始(包括第M行),每N行匹配,例如sed -e 2~2d将删除2、4、6…行。
- M,+N: 从M行开始(包括第M行),匹配N行,也就是一共会匹配N+1行
- M,~N: 从M行开始(包括第M行),一直匹配到X(包括第X行),其中X是M的整数倍。例如sed -e 5,~4d将删除5、6、7、8行。
- /regexp/:匹配正则表达式regexp的行,例如sed -e /^$/d将删除所有空行
- ”$”:匹配最后一行,例如sed -e “$”d。可以混用行数和”$”
也可以混用正则表达式和行,不过意义不大,例如
- sed -e 10,/bb/d 删除第10行到包含bb的行,若在10行之后(不包括第10行)匹配不了bb,那么将连续匹配到最后一行。
- sed -e /aa/,/bb/d
##函数
- d:删除行
- p:打印,常与-n配合使用。
- G: 匹配的行后面插入一空行
- {}: 命令组,例如sed 1,2{G\;G} 在第一二行后面插入两个空行
- !: 反转比匹配,例如sed -e “1,2 ! d” 只保留1,2,其他删除。
- c\text:使用text替换匹配的行
- a\text: 在匹配的行后面插入新行,内容为text
- i\text: 在匹配的行前面插入新行,内容为text
- s/regexp/replacement/:将regexp匹配的内容替换成replacement,s/regexp/replacement/2替换第二个匹配的,s/regexp/replacement/g替换全部。replacement中可以使用”&”来表示regexp匹配的内容,例如”sed -e ‘s/ab/[&]/2’“将第二个匹配的”ab”替换成”[ab]”
- w: sed -e ‘s/w1/& w2/w w2file’ file。w filename : 该参数会将替换过的内容写入到文件w2file并输出替换后的整个文件。注意w2file里写的只是替换
- h/H/g/G/x:处理pattern space和hold space,一般配合使用
##其他
####多个文件同时编辑
- sed -e ‘s/yellow/blue/g’ white.dat red.dat black.dat
####执行文件中的指令
- sed -f script_file
- sed -e 1,10d -f script_file
##参考
- http://linux.die.net/man/1/sed
- http://www.sealinger.com/archives/297/
- http://blog.sina.com.cn/s/blog_6975e5a90100o1l5.html
- http://sed.sourceforge.net/sed1line_zh-CN.html
|
|