4.19 h
函数参数h表示暂存pattern space的资料至hold space。其指令格式如下
[address1,[address2]]h
sed 执行暂存动作时,会盖掉(overwrite)hold space内原来的数据
当sed全部执行结束时,hold space内数据会自动清除
4.20 H
函数参数H 与 h唯一差别是,sed执行h时,数据盖掉hold space内原来的数据,而H则是
"添加(append)"在hold space原来数据后
4.21 g
函数参数g 表示与函数参数h相反的动作,它表示hold space内资料放回pattern space
[address1,[address2]]g
函数参数g最多配合两个地址参数
sed执行放回动作时候,数据盖掉pattern space内原来的数据
4.22 G
函数参数G与g唯一差别是,sed执行g时,数据盖掉(overwrite)pattern space内原来的
数据,而G,数据则是"添加append"在pattern space原来数据后
4.23 x
函数参数x表示交换hold space与pattern space内的数据。其指令格式如下:
[address1[,address2]]x
函数参数x大部分与其他处理hold space的函数参数一起配合
将input.dat文件内第一行资料取代第三行资料
此时,用函数参数h与x来配合。其中函数参数h将第一行资料存入hold space;当第三行
出现在pattern space,以函数参数x交换hold space与pattern space的内容
sed -e '1h' -e'3x' input.dat
4.24 b :lable 函数参数:与函数参数b可在sed
script内建立BASIC语言中GOTO指令的功能。
其中,函数参数:建立标记;函数参数b将下一个执行的指令branch到标记出执行。
函数参数:与b,在script file内配合的情况如下 . . . 编辑指令m1 :记号 编辑指令m2 .
. . [address1,[address2]]b [记号]
其中,当sed执行至指令[address1[,address2]]b[记号]时,如pattern space内的数据
符合地址参数,则sed将下一个执行的位置branch至由:记号设定的标记处,也就是
再由"编辑指令m2"...执行。另外,如果指令中函数参数b后没有记号,则sed将下一个执行
的指令branch到script file的最后,利用此可使sed script内有类似C语言中的case
statement结构 将input.dat文件内数据行的开头字母重复印40次。 A B C 说明 用指令b
p1与:p1构成执行增加字母的循环,同时在字母出现40个时,也用指令b跳出循环
用指令s/A/AA/将"A"替换成"AA"
用指令b p1与: p1构成循环,它目的使上述动作被反复的执行。每执行一次循环,则
数据行上的"A"就多出一个。
例如,第一次循环数据行变成"AA",第二次循环资料行变成"AAA"
用指令[ABC]\{40\}/b作为停止循环的条件。当数据行有连续40和A出现时,函数参数b
将执行的指令跳到最后,停止对此行的编辑
sed
-e '{
:p1
/A/s/A/AA/
/B/s/B/BB/
/C/s/C/CC/
/[ABC]\{40\}/b
b p1
}' input.dat
4.25 t
基本上,函数参数t与函数参数b的功能类似,除了在执行t的branch前,会先去测试其
前的替换指令有没有成功执行替换外
编辑指令m1
:记号
编辑指令m2
.
.
.
s/.../.../
[address1,[address2]]t [记号]
编辑指令m3
与函数参数b不同处在于,执行函数参数t branch时,会先检查其前一个替换指令成功与否
如成功,则执行branch;不成功,则不branch,而继续执行下一个编辑指令
题目: 将input.dat 文件中资料A1 替换成C1、C1 替换成B1、B1 替换成A1。input.dat 檔的内容如下:
代号
B1
A1
B1
C1
A1
C1
说明: input.dat 文件中全部数据行只需要执行一次替换动作, 但为避免数据被替换多次, 所以利用函数参数t 在sed
script 内形成一类似C 语言中case statement 结构, 使每行数据替换一次后能立即用函数参数t 跳离替换编辑。
sed
命令列:
sed
-e '{
s/A1/C1/
t
s/C1/B1/
t
s/B1/A1/
t
}' input.dat
阅读(1048) | 评论(0) | 转发(0) |