分享
 
 
 

SED手册-3.例

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

一般在实际使用编辑器的过程中 , 常需要执行替换文件中的字串、搬移、删除、与搜寻资料行等等动作。

当然 , 一般交谈式编辑器(如 vi、emacs)都能做得到上述功能 , 但文件一旦有大量上述编辑需求时 , 则

用它们编辑十分没有效率。本章将用举例的方式说明如何用 sed 自动执行这些编辑功能。此外 , 在本章

例中 , 均以下述方式描述文件的需求 :

将文件中...资料 , 执行...(动作)

如此 , 目的是为了能将它们迅速的转成编辑指令。其中 , " ...资料" 部份 , 转成指令中的位址参数表示 ;

"执行...动作" 部份 , 则转成函数参数表示 。另外 , 当 "执行...动作" 要由数个函数参数表示时 , 则可利

用 "{ "与 " }" 集合这些函数参数(解[9]) , 其指令形式如下 :

位址参数{

函数参数1

函数参数2

函数参数3

.

:

}

上述指令表示 , 将对符合位址参数的资料 , 依次执行函数参数1、函数参数2、函数参数3 ... 表示的动作。

下面各节 , 分别举例说明 sed 替换资料、移动、删除资料、及搜寻资料的命令。

3.1 替换文件中的资料

3.2 搬动文件中的资料

3.3 删除文件中的资料

3.4 搜寻文件中的资料

3.1 替换文件中的资料

Sed 可替换文件中的字串、资料行、甚至资料区。其中 , 表示替换字串的指令中的函数参数为 s(参照[section4.1]);

表示替换资料行、或资料区的指令中的函数参数为 c(参照[section4.5])。上述情况以下面三个例子说明。上述情况

以下面三个例子说明。

例一. 将文件中含 "machine" 字串的资料行中的 "phi" 字串 , 替换成为 "beta" 字串。其命令列如下 :

sed -e '/machine/s/phi/beta/g' input.dat(以後文件档都以 input.dat 代表)

例二. 将文件中第 5 行资料 , 替换成句子 "Those who in quarrels interpose, must often wipe a bloody nose."。

其命令列如下

sed -e '5cThose must often wipe a bloody nose.

' input.dat

例三. 将文件中 1 至 100 行的资料区 , 替换成如下两行资料 :

How are you?

data be deleted!

则其命令列如下

sed -e '1,100cHow are you?data be deleted!

' input.dat

3.2 搬动文件中的资料

使用者可用 sed 中的 hold space 暂存编辑中的资料、用函数参数 w(参照[section4.9])将文件资料搬动到它档内储存、

或用函数参数 r(参照[section4.8])将它档内容搬到文件内。Hold space 是 sed 用来暂存 pattern space 内资料的暂

存器 , 当 sed 执行函数参数 h、H(参照[section4.19])时 , 会将 pattern space 资料暂存到 hold space;当执行函

数参数 x、g、G(参照[section4.22])时 , 会将暂存的资料取到 pattern space 。下面举三个例子说明。

例一. 将文件中的前 100 资料 , 搬到文件中第 300 後输出。其命令列如下 :

sed -f mov.scr 文件档

mov.scr 档的内容为

1,100{

H

d

}

300G

其中 ,

1,100{

H

d

}

它表示将文件中的前 100 资料 , 先储存(参照[section4.19])在 hold space 之後删除 ;指令 300G (参照[section4.22])

表示 , 将 hold space 内的资料 , 添加在文件中的第 300 资料後输出。

例二. 将文件中含 "phi" 字串的资料行 , 搬至 mach.inf 档中储存。其命令列如下 :

sed -e '/phi/w mach.inf' 文件档

例三. 将 mach.inf 档内容 , 搬至文件中含 "beta" 字串的资料行。其命令列如下 :

sed -e '/beta/r mach.inf' 文件档

另外 , 由於 sed 是一 stream(参照[section1.4])编辑器 , 故理论上输出後的文件资料不可能再搬回来编辑。

3.3 删除文件中的资料

因为 sed 是一行编辑器 , 所以 sed 很容易删除个别资料行或整个资料区。一般用函数参数 d(参照[section4.2])或

D(参照[section4.17]) 来表示。下面举两个例子说明。

将文件内所有空白行全部删除。其命令列为

sed -e '/^$/d' 文件档

regular expression(解[附录 A]) , ^$ 表示空白行。 其中 , ^ 限制其後字串必须在行首; $ 限制其前字串必须在行尾。

将文件内连续的空白行 , 删除它们成为一行。其命令列为

sed -e '/^$/{

N

/^$/D

}' 文件档

其中 , 函数参数 N(参照[section4.16])表示 , 将空白行的下一行资料添加至 pattern space 内。函数参数 /^$/D 表示 ,

当添加的是空白行时 , 删除第一行空白行 , 而且剩下的空白行则再重新执行指令一次。指令重新执行一次 , 删除一行空白行 ,

如此反覆直至空白行後添加的为非空白行为止 , 故连续的空白行最後只剩一空白行被输出。

3.4 搜寻文件中的资料

Sed 可以执行类似 UNIX 命令 grep 的功能。理论上 , 可用 regular expression(参照[附录 A])。例如 , 将文件中含

有 "gamma" 字串的资料行输出。则其命令列如下:

sed -n -e '/gamma/p' 文件档

但是 , sed 是行编辑器 , 它的搜寻基本上是以一行为单位。因此 , 当一些字串因换行而被拆成两部份时 , 一般的方法

即不可行。此时 , 就必须以合两行的方式来搜寻这些资料。其情况如下面例子:

例. 将文件中含 "omega" 字串的资料输出。其命令列如下

sed -f gp.scr 文件档

gp.scr 档的内容如下 :

/omega/b

N

h

s/.*\n//

/omega/b

g

D

在上述 sed script(解[10]), 因藉着函数参数 b 形成类似 C 语言中的 case statement 结构 , 使得 sed 可分别处理当

资料内含 "omega" 字串 ; 当 "omega" 字串被拆成两行 ; 以及资料内没有"omega" 字串的情况。接下来就依上述的三种情

况 , 将 sed script 分成下面三部份来讨论。

当资料内含 "omega" , 则执行编辑指令

/omega/b

它表示当资料内含 "omega" 字串时 , sed 不用再对它执行後面的指令 , 而直接将它输出。

当资料内没有"omega" , 则执行编辑指令如下

N

h

s/.*\n//

/omega/b

其中 , 函数参数 N(参照[section 4.16]) , 它表示将下一行资料读入使得 pattern space 内含前後两行资料 。函数参

数 h(参照[section 4.19]) , 它表示将 pattern space 内的前後两行资料存入 hold space 。函数参数 s/.*\n// , 它

表示将 pattern space 内的前後两行资料合(解[11])成一行。/omega/b , 它表示如果合後的资料内含 "omega" 字

串 , 则不用再执行它之後的指令 , 而将此资料自动输出 ;

当合後的资料依旧不含 "omega" , 则执行编辑指令如下

g

D

其中 , 函数参数 g(参照[section4.21]) , 它表示将 hold space 内合前的两行资料放回 pattern space。 函数参数

D(参照[section4.17]) , 它表示删除两行资料中的第一行资料 , 并让剩下的那行资料 , 重新执行 sed script。如此 ,

无论的资料行内或行间的字串才可搜寻完全。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有