Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216174
  • 博文数量: 76
  • 博客积分: 2231
  • 博客等级: 大尉
  • 技术积分: 826
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-27 09:15
文章分类

全部博文(76)

文章存档

2011年(76)

分类: LINUX

2011-11-24 09:05:36

$ sed -n 's/\(love\)able/\1rs/p' example
love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

$ sed -n '/test/,/check/p' example
所有在模板test和check所确定的范围内的行都被打印。

下一个:n命令
$ sed '/test/{ n; s/aa/bb/; }' example
如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。

保持和获取:h命令和g命令
$ sed -e '/test/h' -e '$g example
在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者
输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行
等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一
个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,g命令取出保持
缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这
个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。

保持和互换:h命令和x命令
$ sed -e '/test/h' -e '/check/x' example
互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
eg: sed -n 1p 107.jad显示107.jad文件的第一行

Hold space 是sed
用来暂存pattern space 内数据的缓存器, 当sed执行函数参数h、H(参照[section4.19])时,
会将pattern space 资料暂存到hold space;当执行函数参数x、g、G(参照[section4.22])时,
会将暂存的资料取到pattern space 。

$ sed -e '1,3{H;d}' -e '4G' file
 
介绍函数参数
| s | d | a | i | c | p | l | r | w | y | ! | n | q | = | # | N | D | P | h | H | g | G | x | b | t |

[address1[ ,address2]] s/pattern/replacemen/[flag]


sed使用手册
1.3 sed 能做哪些编辑工作
sed 可删除(delete)、改变(change)、添加(append)、插入(insert)、合并、交换文件中的数据行

1.4 sed 如何工作

2 使用sed
sed命令列可分成编辑指令和文件部分。
编辑指令由位址(address)和函数(function)两部分组成,其中执行时sed利用它的地址
参数来决定编辑的对象
sed编辑命令,命令列执行时加选项-e,在文件内执行时只需在文件名前加选项-f

2.1 执行命令列上的编辑命令
sed -e '编辑指令1' -e '编辑指令2' 文件
删除yel.dat内1至10行数据,并将其余文字中的"yellow"字符串改成"black"
sed -e '1,10d' -e 's/yellow/black/g' yel.dat

2.2 sed的编辑指令
sed的编辑指令的格式如下:
    [address1[,address2]]function[argument]
其中,地址参数address1、address2为行数或regular expression字符串,表示执行编辑的
数据行;函数参数function[argument]为sed的内定函数。表示执行的编辑动作

2.2.1 地址(address)参数的表示法
地址参数表示法只是将要编辑的数据行,用它们的行数或者其中的字符串来代替表示它们。
删除文件内第 10 行数据
10d
删除含有"man"字符串的数据行
/man/d
删除第10行到200行数据
10,200d
删除第10行到含"man"字符串的行
10,/man/d

地址参数的内容:
地址为十进制数
此数字表示行数。

地址为 regular expression
当数据行中有符合regular expression所表示的字符串时,则执行函数参数指示的编辑动作
在regular expression前后必须加上"/",例如指令/t.*t/d,表示删除所有含两个"t"的数据行
其中,"."表示任意字符; "*"表示前面字符可重复任意次,它们结合".*"表示两"t"之间的任意
字符串

地址参数的个数:在指令中没有地址参数时,表示全部执行函数参数所指示的编辑动作;当只有
一地址参数时,表示只有符合地址的数据行才编辑;当有两个地址参数,如address1,address2
时,表示对数据区执行编辑,address1 代表起始数据行,address2代表结束行
d
删除文件内所有数据行
5d
删除文件内第5行资料
1,/apple/d
删除由第一行至"apple"字符串的数据行
/apple/,/orange/d
表示删除含有"apple"字符串至"orange"字符串的数据行
阅读(1207) | 评论(0) | 转发(0) |
0

上一篇:unixshell(2)

下一篇:函数功能

给主人留下些什么吧!~~