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 之例二、三。
|
|
|