sed参数的用法

本章将以一节一个函数参数的方式 ,介绍所有 sed 提供的函数参数 , 其中有

  | s | d | a | i | c | p | l | r | w | y | ! | n | q | = | # | N | D | P | h | H | g | G | x | b | t |

  另外 , 在各节中 , 首先简单介绍函数参数功能 , 接着说明函数参数与位址参数配合的格式 , 而其中也一描述

  sed 执行此函数参数的工作情形。

  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

  多工作业系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值