本章将以一节一个函数参数的方式 ,介绍所有 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
多工作业系统
sed参数的用法
最新推荐文章于 2024-10-15 10:56:44 发布