3.1 替换文件中的数据
sed 可替换文件中的字符串、数据行、甚至数据区。其中,表示替换字符串的指令中的函数
参数为s;表示替换数据行、或数据区的指令中的函数参数为c
将文件中含"machine"字符串的数据行中的"phi"字符串替换成"beta"字符串
sed -e '/machine/s/phi/beta/g' input.dat
将文件中第5行数据,替换成句子"Those who in quarrels interpose, must often wipe a bloody nose."
sed -e '5c\
"Those who in quarrels interpose, must often wipe a bloody nose."
' input.dat
将文件中1至100行的资料区,替换成如下两行资料
How are you?
data be deleted!
则命令列如下
sed -e '1,100c\
How are you?\
data be deleted!
' input.dat
3.2 搬动文件中的数据
使用者可用sed中的hold space暂存编辑中的数据、用函数参数w将文件移动到它文件内储存
、或用函数参数r将它档内容搬到文件内。hold space是sed用来暂存pattern space内数据
缓存器,当sed执行函数参数h H时,会将pattern space资料暂存到hold space;当执行函数
参数x,g,G时,会将暂存的资料取到pattern space
将文件中的前100行数据,搬到第300行后输出
sed -f mov.src 文件档
mov.src内容
1,100{
H
d
}
300G
其中,
1,100{
H
d
}
它表示将那个文件的前100数据,先储存在hold space,之后删除数据;指令300G表示,将hold
space内的资料,添加到文件中的第300数据后输出
将文件中含"phi"字符串的数据行,搬至mach.inf档中储存
sed -e '/phi/w mach.inf' 文件档
将match.inf档内容,搬至文件中含"beta"字符串的数据行
sed -e '/beta/r match.inf' 文件档
3.3 删除文件中的数据
将档内所有空白行全部删除
sed -e '/^$/d'
^$表示空白行
将文件内连续的空白行,删除他们成为一行
sed -e '/^$/{
N
/^$/D
"}' 文件档
函数参数N表示,将空白行的下一行资料添加至pattern space内。函数参数/^$/D表示
当添加的是空白行时,删除第一行空白行,而且剩下的空白行则在重新执行一次指令
指令重新执行一次,删除一行空白行,如此反复直至空白行后添加的为非空白行为止,
故连续的空白行最后只剩一空白行被输出。
3.4 搜寻文件中的数据
将文件中含有"gamma"字符串的数据行输出
sed -n -e '/gamma/p' 文件档
sed是行编辑器,搜寻以行为单位。当遇到一些字符串因为换行而被拆成两部分时候,
一般的方法不可行。此时必须以合并两行的方式来搜寻这些数据
将文件中含"omega"字符串的数据输出
sed -f gp.src
/omega/b
N
h
s/.*\n//
/omega/b
g
D
借着函数参数b形成类似C语言中的case statement结构,使得sed可分别处理档数据内含
"omega"字符串;档"omega"字符串被拆成两行;以及数据内没有"omega"字符串的情况
当数据内含"omega",执行编辑命令
/omega/b
表示档资料内含"omega"字符串时,sed不用再对它执行后面的指令,而直接将它输出
当数据行没有"omega"字符串时,执行编辑指令
N
h
s/.*\n//
/omega/b
函数参数N,表示将下一行资料读入使得pattern space内含有前后两行数据。函数参数
h,表示将pattern space内的前后两行资料存入hold space。函数参数s/.*\n//,表示
将pattern space内的前后两行资料合并成一行。/omega/b,它表示如果合并后的数据
内含有"omega"字符串,则不用再执行它之后的指令,而将此数据自动输出
当合并后依旧不含"omega",则执行编辑指令如下
g
D
其中g表示将hold space内合并前的两行资料放回pattern space,函数参数D,表示
删除两行资料中的第一行资料,并让剩下的那行数据,重新执行sed script
阅读(1229) | 评论(0) | 转发(0) |