Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92291478
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 23:22:37

4.1 s

      

   函数参数 s 表示替换(substitute)文件内字符串。其指令格式如下 : 
[address1[ ,address2]] s/pattern/replacemen/[flag] 
对上述格式有下面几点说明 : 

函数参数 s 最多与两个地址参数配合。 
关于 "s/pattern/replacement/[flag]"(批注[12]) 有下面几点说明: 
pattern : 它为 reguler expression 字符串。它表示文件中要被替换的字符串。 
replacement : 它为一般字符串。但其内出现下列字符有特别意义 : 

& : 代表其前 pattern 字符串。例如 
sed -e 's/test/& my car/' 资料文件名    

指令中 , & 代表 pattern 字符串 "test"。故执行后 , 数据文件的 "test" 被替换成 "test my car"。 
\n : 代表 pattern 中被第 n 个 \( 、\)(参照[附录 A]) 所括起来的字符串。例如 
sed -e  's/\(test\) \(my\) \(car\)/[\2 \3 \1]/' 资料文件名    

指令中 , \1 表示 "test"、\2 表示 "my"、\1 表示 "car" 字符串。故执行后 , 数据文件的 "test my car" 被替换成 "[my car test]"。 
\ : 可用它来还原一些特殊符号(如上述的 & 与 \ )本身字面上的意义 , 或用它来代表换行。 
flag : 主要用它来控制一些替换情况 : 
当 flag 为 g 时 , 代表替换所有符合(match)的字符串 。 
当 flag 为十进制数 m 时 , 代表替换行内第 m 个符合的字符串。 
当 flag 为 p 时 , 代表替换第一个符合 pattern 的字符串后 , 将数据输出标准输出文件。 
当 flag 为 w wfile 时 , 代表替换第一个符合 pattern 的字符串后 , 输出到 wfile 档内(如果 wfile 不存在 , 则会重新开启名为 wfile 的档案)。 
当没有 flag 时 , 则将资料行内第一个符合 pattern 的字符串以 replacement 字符串来替换 。 
delimiter : 在 "/pattern/replace/[flag] " 中 "/" 被当成一 delimiter。除了空白(blank)、换行(newline) 之外 , 使用者可用任何字符作为 delimiter。例如下述编辑指令 
        s#/usr#/usr1#g

上述命令中 \verb|#| 为 delimiter。如果用 "/" 做 delimiter , 则 sed 会将 pattern 与 replacement 中的 "/" 当成 delimiter 而发生错误。 
范例: 
题目 : 替换 input.dat 檔(后面如果没有特别指定 , 均假设文件档名为 input.dat)内 "1996" 字符串成 "1997" , 同时将这些数据行存入 year97.dat 档内。 
说明 : 用函数参数 s 指示 sed 将 "1996" 字符串替换成 "1997" , 另外用 s argument 中的 flag w 指示 sed 将替换过的资料行存入 year97.dat 档内。 
sed 命令列: 
sed -e 's/1996/1997/w year97.dat' input.dat

4.2 d

      

函数参数 d 表示删除数据行 , 其指令格式如下:

       [address1[ ,address2]] d 


对上述格式有下面几点说明: 

函数参数 d 最多与两个地址参数配合。 
sed 执行删除动作情况如下 : 
将 pattern space 内符合地址参数的数据删除。 
将下一笔资料读进 pattern space 。 
重新执行 sed script。 
范例 : 可参考 section 3.3。 

4.3 a

      

函数参数 a 表示将资料添加到文件中。其指令格式如下: 

       [address1] a\        使用者所输入的数据 

对上述格式有下面几点说明:


函数参数 a 最多与一个地址参数配合。 
函数参数 a 紧接着 "\" 字符用来表示此行结束 , 使用者所输入的数据必须从下一行输入。如果数据超过一行 , 则须在每行的结尾加入"\"。 
sed 执行添加动作情况如下 : 当 pattern space 内数据输出后 , sed 跟着输出使用者所输入的数据。 
范例 : 
题目: 添加 "多任务操作系统" 在含 "UNIX" 字符串的数据行后。假设 input.dat 档的内容如下 : 
UNIX

说明: 用函数参数 a 将所输入的数据添加在含 "UNIX" 字符串的数据行后。 
sed 命令列如下 : 
sed -e '/UNIX/a\
多任务操作系统
' input.dat 

执行上述命令后 , 其输出结果如下 : 
UNIX
多任务操作系统

4.4 i

      

函数参数 i 表示将资料插入文件中。其指令格式如下: 
       [address1] i\        使用者所输入的数据


对上述格式有下面几点说明: 

函数参数 i 最多与一个地址参数配合。 
函数参数 i 紧接着 "\" 字符用来表示此行结束 , 使用者所输入的数据必须从下一行输入。如果数据超过一行 , 则须在每行的结尾加入"\"。 
sed 执行插入动作的情况如下 : 在 pattern space 内数据输出前 , sed 先输出使用者所输入的数据。 
范例 : 
题目: 将 "文章版权属于中央研究院" 插在 input.dat 檔中含 "院长 : 李远哲" 的数据行之前。假设 input.dat 档内容如下 : 
院长 : 李远哲

说明: 用函数参数 i 将数据行 "文章版权属于中央研究院" 插在含 "院长 : 李远哲" 的数据行之前。 
sed 命令列如下: 
sed -e '/院长 : 李远哲/i\
文章版权属于中央研究院
' input.dat

执行上述命令后的输出如下 : 
文章版权属于中央研究院
院长 : 李远哲

4.5 c

      

函数参数 c 表示改变文件中的数据。其格式如下: 
     [address1[ ,address2]]c\      使用者所输入的数据


对上述格式有下面几点说明: 

函数参数 c 最多与两个地址参数配合。 
函数参数 c 紧接着 "\" 字符用来表示此行结束 , 使用者所输入的数据必须从下一行输入。如果数据超过一行 , 则须在每行的结尾加入"\"。 
sed 执行改变动作的情况 : 在 pattern space 内数据输出时 , sed 改变它成为使用者所输入的数据。 
范例 : 参考 section 3.1 之例二、三。 
阅读(543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~