sed使用手册

Sed命令列可分成编辑指令与文件档部份。其中,编辑指令负责控制所有的编

辑工作;文件档表示所处理的档案。

sed的编辑指令均由位址(address)与函数(function)两部份组成,其中,

执行时,sed利用它的位址参数来

决定编辑的对象;而用它的函数参数([3])编辑。

此外,sed编辑指令,除了可在命令列上执行,也可在档案内执行。其中差

别只是在命令列上执行时,其前必

须加上选项-e;而在档案([4])内时,则只需在其档名前加上选项-f。另

,sed执行编辑指令是依照它

们在命令列上或档内的次序。

下面各节,将介绍执行命令列上的编辑指令sed编辑指令、执行档案内的编

辑指令、执行多个档案的编辑、及

执行sed输出控制。

2.1执行命令列上的编辑指令

2.2sed编辑指令

2.3执行档案内的编辑指令

2.4执行多个档案的编辑

2.5执行sed输出控制

2.1.执行命令列上的编辑指令

当编辑指令(参照[section2.2])在命令列上执行时,其前必须加上选项-e

其命令格式如下:

sed-e'编辑指令1'-e'编辑指令2'...文件档

其中,所有编辑指令都紧接在选项-e之後,并置於两个"'"特殊字元间。

另外,命令上编辑指令的执行是由

左而右。

一般编辑指令不多时,使用者通常直接在命令上执行它们。例如,删除yel.

dat110行资料,并将其

馀文字中的"yellow"字串改成"black"字串。此时,可将编辑指令直接在命

令上执行,其命令如下:

sed-e'1,10d'-e's/yellow/black/g'yel.dat

在命令中,编辑指令'1,10d'([5])执行删除110行资料;编辑指令

's/yellow/black/g'(解[6]),

"yellow"字串替换(substuite)"black"字串。

2.2sed的编辑指令

sed编辑指令的格式如下:

[address1[,address2]]function[argument]

其中,位址参数address1address2为行数或regularexpression字串,

表示所执行编辑的资料行;函数参

function[argument]sed的内定函数,表示执行的编辑动作。

下面两小节,将仔细介绍位址参数的表示法与有哪些函数参数供选择。

2.2.1位址(address)参数的表示法

实际上,位址参数表示法只是将要编辑的资料行,用它们的行数或其中的字串

来代替表示它们。下面举几个例子

说明(指令都以函数参数d(参照[section4.2])为例):

删除档内第10行资料,则指令为10d

删除含有"man"字串的资料行时,则指令为/man/d

删除档内第10行到第200行资料,则指令为10,200d

删除档内第10行到含"man"字串的资料行,则指令为10,/man/d

接下来,以位址参数的内容与其个数两点,完整说明指令中位址参数的表示法

(同样也以函数参数d为例)

位址参数的内容:

位址为十进位数字:此数字表示行数。当指令执行时,将对符合此行数的资料执

行函数参数指示的编辑动作。例如,

删除资料档中的第15行资料,则指令为15d(参照[section4.2])。其馀类推,

如删除资料档中的第m行资料,

指令为md

位址为regularexpression(参照[附录A]):

当资料行中有符合regularexpression所表示的字串时,则执行函数参数指示

的编辑动作。另外,

regularexpression前後必须加上"/"。例如指令为/t.*t/d,表示删除所有含

"t"字母的资料行。其中,"."

表示任意字元;"*"表示其前字元可重任意次,它们结合".*"表示两"t"字母

间的任意字串。

位址参数的个数:在指令中,当没有位址参数时,表示全部资料行执行函数参

数所指示的编辑动作;当只有一位址

参数时,表示只有符合位址的资料行才编辑;当有两个位址参数,

address1,address2,表示对资料区执行

编辑,address1代表起始资料行,address2代表结束资料行。对於上述内容,

以下面例子做具说明。

例如指令为

d

其表示删除档内所有资料行。

例如指令为

5d

其表示删除档内第五行资料。

例如指令为

1,/apple/d

其表示删除资料区,由档内第一行至内有"apple"字串的资料行。

例如指令为

/apple/,/orange/d

其表示删除资料区,由档内含有"apple"字串至含有"orange"字串的资料行

2.2.2有那些函数(function)参数

下页表中介绍所有sed的函数参数(参照[chapter4])的功能。

函数参数功能

:label建立scriptfile内指令互相参考的位置。

#建立解

{}集合有相同位址参数的指令。

!不执行函数参数。

=印出资料行数(linenumber)

a/添加使用者输入的资料。

blabel将执行的指令跳至由:建立的参考位置。

c/以使用者输入的资料取代资料。

d删除资料。

D删除patternspace内第一个newline字母/前的资料。

g拷贝资料从holdspace

G添加资料从holdspacepatternspace

h拷贝资料从patternspaceholdspace

H添加资料从patternspaceholdspace

l印出l资料中的nonprintingcharacterASCII码。

i/插入添加使用者输入的资料行。

n读入下一笔资料。

N添加下一笔资料到patternspace

p印出资料。

P印出patternspace内第一个newline字母/前的资料。

q跳出sed编辑。

r读入它档内容。

s替换字串。

tlabel先执行一替换的编辑指令,如果替换成牛p>则将编辑指令跳至:label

处执行。

w写资料到它档内。

x交换holdspacepatternspace内容。

y转换(transform)字元。

虽然,sed只有上表所述几个拥有基本编辑功能的函数,但由指令中位址参数和

指令与指令间的配合,也能使

sed完成大部份的编辑任务。

2.3执行档案内的编辑指令

当执行的指令太多,在命令列上撰写起来十分混乱,此时,可将这些指令整

理储存在档案

(譬如档名为script_file),用选项-fscript_file,则让sed执行

script_file内的编辑指令。其命

令的格示如下:

sed-fscript_file文件档

其中,执行script_file内编辑指令的顺序是由上而下。例如上一节的例子,

其可改成如下命令:

sed-fysb.scryel.dat

其中,ysb.scr档的内容如下:

1,10d

s/yellow/black/g

另外,在命令列上可混合使用选项-e-f,sed执行指令顺序依然是由命

令列的左到右,如执行至-f

档案内的指令,则由上而下执行。

2.4执行多个文件档的编辑

sed命令列上,一次可执行编辑多个文件档,它们跟在编辑指令之後。例

,替换

white.datred.datblack.dat档内的"yellow"字串成"blue",其命令

如下:

sed-e's/yellow/blue/g'white.datred.datblack.dat

上述命令执行时,sedwhite.datred.datblack.dat顺序,执行编辑指

s/yellow/blue/(请参照[section4.1],

进行字串的替换。

2.5.执行输出的控制

在命令列上的选项-n([7])表示输出由编辑指令控制。由前章内容得知,

sed"自动的"将资料由

patternspace输送到标准输出档。但藉着选项-n,可将sed"自动的

"的动作改成"被动的"由它所执行的

编辑指令([8])来决定结果是否输出。

由上述可知,选项-n必须与编辑指令一起配合,否则无法获得结果。例如,

印出white.dat档内含有"white"

字串的资料行,其命令如下:

sed-n-e'/white/p'white.dat

上面命令中,选项-n与编辑指令/white/p(参照[section4.6])一起配合控制

输出。其中,选项-n将输出控制权

移给编辑指令;/white/p将资料行中含有"white"字串印出萤幕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值