sed基础用法和笔试题doc.docx

上传人:b****7 文档编号:10640798 上传时间:2023-02-22 格式:DOCX 页数:19 大小:27.81KB
下载 相关 举报
sed基础用法和笔试题doc.docx_第1页
第1页 / 共19页
sed基础用法和笔试题doc.docx_第2页
第2页 / 共19页
sed基础用法和笔试题doc.docx_第3页
第3页 / 共19页
sed基础用法和笔试题doc.docx_第4页
第4页 / 共19页
sed基础用法和笔试题doc.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

sed基础用法和笔试题doc.docx

《sed基础用法和笔试题doc.docx》由会员分享,可在线阅读,更多相关《sed基础用法和笔试题doc.docx(19页珍藏版)》请在冰豆网上搜索。

sed基础用法和笔试题doc.docx

sed基础用法和笔试题doc

1.sed

sed是一个非交互性流编辑器,必须通过行号或正则表达式指定要改变的文本行。

和grep与awk—•样,sed是一•种重要的文本过滤工具,或使用一行命令、或使用管道与grep与awk相结合。

1.1.sed怎样读取数据

sed从文件的一个文本行或标准输入的几种格式屮读取数据,将之copy到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。

重复此过程直到命令结束。

记住:

sed不与原始文件打交道,它操作的只是一个copy,然后所有的改动如果没有重定向到—个文件,将输出到屏幕。

1.2.调用sed

1)sed命令行

sed[option]sed-commandinput-files

记住:

在命令行使用sed命令时,实际命令要加单引号(这样可以禁用shell扩展)。

Sed也允许加双引号。

2)将sed命令插入脚本文件,然后调用sed

sed[option]-fsed脚本文件输入文件

3)将sed命令插入脚本文件,并使sed脚本可执行

sed脚本文件[option]输入文件

第一行要具有sed命令解释器

不管使用上述那种方式,如果没冇指定输入文件,sed从标准输入屮接受输入,一般是键盘或重定向结果。

1.3.保存sed输出

由于不接触原始文件,如果想要保存改动A容,简单地将所有输出®定向到一个文件即对

sedmyoutfile

1.4.使用sed在文件中查找文本的方式

sed浏览输入文件时,缺省从第一行开始,有W种方式定位文本:

1)使用行号,可以是一个简单数字,或是一个行号范围

行地址

$sed-e’1d’/etc/services|more

使用sed从输出流除去/etc/services文件第一行

”-e〃选项:

指定下一条是编辑命令,在有多项编辑命令时加入此选项。

如果只用到一条命令,可省略。

地址范围

$sed-e’1,10d’/etc/services|more

sed将删除输出的第1到10行

用逗号将两个地址分开吋,sed将把后面的命令应用到从第一个地址幵始、到第二个地址结束的范围。

在本例屮,将1d*命令应用到第1到10行(包括这两行)。

所有其它行都被忽略。

2)使用正则表达式

$sed-e7A#/d*/etc/services|more

sed删除以开始的行

规则表达式地址总是由斜杠括起。

它们指定一种模式,紧跟在规则表达式地址之后的命令将仅适用于正好与该特定模式匹配的行。

$sed-n7test/,/check/p*example

所有在模板test和check所确定的范围内的行都被打印。

-n选项表示不打印输出结果。

加编辑命令p将使-n选项无效,表示只打印那些发生编辑的行

$sed-n*5,/Atest/p*example

打印从第五行开始到第一个包含以test开始的行之间的所有行。

X

X为一行号,如1

X,y

表示行号范围从x到y

x,y!

斉询不包含指定行号x和y的行

1,2!

/pattern/

查询包含模式的行

/disk/或/[a-z]/

/pattern/pattern/

查询包含两个模式的行

/disk/disks/

在给定行号上查询包含模式的行

/ribbon/,3

x,/pattern/

通过行号和模式杳询匹配行

3,/vdu/

1.5.基本sed编辑命令

P

打印匹配行

=

显示文件行号

a\

在定位行号后将新文本插入冈配行的下一行

i\

在定位行号后将新文本插入到匹配行的前一行

c\

用新文本替换定位文本

d

删除定位行

s

使用替换模式替换相应模式

r

从另一个文件中读文本

w

写文本到一个文件

q

第一个模式匹配完成后退出或立即退出

l

益示与八进制ASCII代码等价的控制字符

{}

在定位行执行的命令组

n

移动到匹配行的下一行

延续到下一输入行;允许跨行的模式匹配语句

g

将拔式2粘贴到/patternn/

y

用替换模式替换查找模式,前后两个模式的字长要相同。

h

将模式空间的内容复制并存入保持缓存区内,待以后使用

G

取出保持缓冲区的行,然后把它放回模式空间中

X

取出保持缓冲区的行,然后用它替换模式空间的内容

&

保存发现模式以便重新调用它,然后把仑放在替换字符串里而。

#sedf2p*grade.txt

M.Tansley

05/99

48311

Green

8

40

44

J.Lulu

06/99

48317

green

9

24

26

J.Lulu

06/99

48317

green

9

24

26

P-Bunny

02/99

48

Yellow

12

35

28

J.Troll

07/99

4842

Brown-3

12

26

26

L

05/99

4712

Brown-2

12

30

28

#sed-n

f2pfgrade.txt

J.Lulu

06/99

48317

green

9

24

26

#

#sed-n

,1,2p..

grade.txt

M.Tansley

05/99

48311

Green

8

40

44

J.Lulu

06/99

48317

green

9

24

26

#sed-n

VBunny/p1grade.txt

P.Bunny

#sed-n

02/9948Yellow

7Tansley"pgrade.txt

12

35

28

Tansley

05/99

48311

Green

8

40

44

L.Tansley

#sed-n

05/994712

’1,/Tansley/’p\

Brown-2

grade.txt

12

30

28

M.Tansley

05/99

48311

Green

8

40

44

M.Lulu

06/99

48317

green

9

24

26

P.Bunny

02/99

48

Yellow

12

35

28

J.Troll

07/99

4842

Brown-3

12

26

26

L.Tansley

#sed-n

05/994712Brown-2

•5,/Tansley/’pgrade.txt

12

30

28

L

#sed-n'

05/994712

'A$/*pgrade.txt

Brown-21230

//匹配元字符$前,

28

必须使用反斜线\屏蔽其特殊含义

M.Lulu

06/99

48317

green

9

24

26$20

#sed-n*1p*grade.txt//打印第一行

#sed-n*$p*grade.txt//打印最后一行

要打印整个文件,只需将行范围设为第一行到最后一行1,$。

$意为最后一行。

#sed-n

’1,$pfgrade.txt

M.Tansley

05/99

48311

Green

8

40

44

M.Lulu

06/99

48317

green

9

24

26$20

P.Bunny

02/99

48

Yellow

12

35

28

J.Troll

07/99

4842

Brown-3

12

26

26

L.Tansley

05/99

4712

Brown-2

12

30

28

#sed-n

7.*ing/p*

grade.txt

匹配任意字母,后跟任意字母的0次或多次重复,并以ing结尾,模式为/.*ing八讨以使用这个模式查询以ing结尾的任总单词。

打印行号

要打印行号,使用等号=。

打印模式匹配的行号,使用格式/pattem/=

#sed-e7Troll/=*grade.txt

M.Tansley

05/99

48311

Green

8

40

44

M.Lulu

06/99

48317

green

9

24

26$20

P.Bunny

A

02/99

48

Yellow

12

35

28

4

J.Troll

07/99

4842

Brown-3

12

26

26

L.Tansley

05/99

4712

Brown-2

12

30

28

#sed-n7Troll/=*grade.txt

4

#sed-n-e’/Troll/p’-e7Troll/='grade.txt

J.Troll07/994842Brown-3122626

1.5.1.a:

附加文本

附加文本时不能指定范围,只允许一个地址模式。

文本附加操作时,结果输出在标准输出上。

注意它不能被编辑,因为sed执行时,首先将文件的一行文本拷贝至緩冲区,在这里sed编辑命令执行所有操作(不是在原始文件上),因为文本直接输出到标准输出,seel并无拷贝。

要想在附加操作后编辑文本,必须保存文件,然后运行另一个sed命令编辑它。

这时文件的内容又被移至缓冲区。

附加操作格式如下:

[address]a\

Text\

Text\

text

地址指定一个模式或行号,定位新文本附加位置。

a\通知sed对3\后的文木进行实际附加操作。

观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。

sed执行到这儿,将创建一新行,然后插人卜*—文本行。

最后一行不力n斜•划线,sed假定这是附加命令结尾。

当附加或插入文本或键入几个sed命令时,可以利用辅助的shell提示符以输入多行命令。

$sed*/Atest/a\\>thisisaexample1example

''>thisisaexample〃被追加到以test开头的行后面,sed要求命令a后面有一

个反斜杠。

1.5.2.k插入命令

和附加命令一样,它也只接受一个地址。

#viinsert.sed

#!

/bin/sed-f

/Tansley/i\//也可以使用行号指定文本插入位置,如“1i\”

W.Alice

chmod+xinsert.sed#./insert.sedgrade.txt

W.Alice

M.Tansley

05/99

48311

Green

8

40

44

M.Lulu

06/99

48317

green

9

24

26

P.Bunny

02/99

48

Yellow

12

35

28

J.Troll07/994842Brown-3122626

W.Alice

L.Tansley05/994712Brown-2123028

$sed7test/i\\newline*example

如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。

1.5.3.c:

修改命令

修改命令将在匹配模式空间的指定行用新文本加以替代,格式如下:

[address]c\

Text\

Text\

text

#vichange,sed

[#!

/bin/sed-f

5c\

!

S.Icy

./change.sedgrade.txt

M.Tansley

05/99

48311

Green

8

40

44

M.Lulu

06/99

48317

green

9

24

26$20

P.Bunny

02/99

48

Yellow

12

35

28

J.Troll

07/99

4842

Brown-3

12

26

26

S.Icy

1.5.4.d:

删除命令

$sed-e’1d’/etc/services|more

使用sed从输出流除去/etc/services文件第一行

$sed-e’1,10cT/etc/services|more

sed将删除输出的第1到10行

$sed-e7A#/d*/etc/services|more

sed删除以开始的行

$sed'$d*example

删除example文件的最后一行

$sed*2,$d'example

删除example文件的第二行到末尾所有行。

$sed7test/*dexample

删除example文件所有包含test的行。

1.5.5.s:

替换文本

替换(substitute)命令用替换模式替换指定模式,格式力

[address[,address]]s/pattern-to-find/replacement-pattern/[gpwn]

s:

通知sed这是一个替换操作,并查询pattern-to-find,成功后用

replacement-pattern待换它。

g:

缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式

P:

缺省sed将所有被替换行写入标准输出,加p将使-n选项无效(-n不打印输出结果)

w:

文件名使用此选项将输出定向到一个文件

sed‘s/night/NIGHT/’quote.txt

sed‘sA$//’quote.txt

sed‘/The/Wow!

/g’quote.txt

sed‘s/splend/SPLEND/wsed.out’quote.txt

如果要附加或修改一个字符串,可以使用(&)命令,&命令保存发现模式以便重新调用

它,然后把它放在替换字符串里面。

sed-n‘s/nurse/’’hello”&/p’quote

原句:

ThelocalnurseMissP.Neavewasinattendance.

修改:

Thelocal”hello”nurseMissP.Neavewasinattendance.

#sed-n's/tony/&x/p*employees

500tonyx2000

#sed-n*s/tony/x&/p*employees

500xtony2000

$sed’s/test/mytest/g’example

在整行范围内把test替换为mytest。

如果没有g标记,则只有每行第一个匹配的test被替换成mytest。

$sed-n,s/Atest/mytest/p,example

如果某一行开头的test被替换成mytest,就打印它。

$sed*s/A192.168.0.1/&localhost/*example

&符号表示替换字符串中被找到的部份。

所有以192.168.0.1开头的行都会被替换成它自已加localhost,变成192.168.0.llocalhost。

$sed-nfsA(love\)ableA1rs/p*example

love被标记力1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

$sed’s#10#100#g’example

不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,在这里是分隔符,代替了默认的“/”分隔符。

表示把所有10替换成100。

$sed7test/,/check/s/$/sedtest/*example

对于模板test和west之间的行,每行的末尾用字符串sedtest替换。

1.5.6.r:

从文件读入命令

$sed7test/rfile'example

file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的卜面。

1.5.7.w:

写入文件命令

将sed结果写入文件:

$sed-n’/test/wfile’example

在example屮所有包含test的行都被写入file里。

sed’1,2wtmp*grade.txt

sed’/Alice/wtmp’grade.txt

1.5.8.n:

下一个命令

$sed7test/{n;s/aa/bb/;}*example

如果test被匹配,则移动到匹配行的下一行,锊换这一行的aa,变为bb,并打印该行,然后继续。

1.5.9.y:

变形命令

$sed*1,1Oy/abcde/ABCDEfexample

把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。

前后两个模式的字长要相同。

1.5.10.q:

退出命令

$sed*10q*example

打印完第10行后,退出sed。

1.5.11.h命令和G命令:

保持和获取

$sed-e’/test/h’-e’$G’example

在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区屮,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。

接着模式空间被清空,并存入新的一行等待处理。

在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。

第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在己经存在于模式空间中的行的末尾。

在这个例子屮就是追加到最后一行。

简单来说,任何包含test的行都被复制并追加到该文件的末尾。

#sed-e*/jason/h'-e'$G'employees

100jason1996

200john1997

300sanjay1998

400ashok.1999

500tony2000

100jason1996

#sed-e*/jason/h*-e'/ashok/G'employees

100jason1996

200john1997

300sanjay1998

400ashok1999

100jason1996

500tony2000

1.5.12.h命令和x命令:

保持和互换

$sed-e1/test/h1-e1/check/x1example

互换模式空间和保持缓冲区的内容。

也就是用包含test的行替换包含check的行。

#catemployees

100jason1996

200john1997

300sanjay1998400ashok1999

500tony2000

#sed-e1/jason/h1-e1/tony/x1employees

100

jason

1996

200

john

1997

300

sanjay

1998

400

ashok

1999

100

jason

1996

1.6.sed选项

-n

缺省sed将所有结果写入标准输出,力卩-n不打印输出结果。

加编辑命令p将使-n选项无效,表示只打印那些发生编辑的行。

-e

下一命令是编辑命令。

使用多项编辑时加入此选项。

如果只用到一条sed命令,此选项无

用,但指定它也没有关系。

-f

如果正在调用sed脚本文件,使用此选项。

此选项通知sed—个脚本文件支持所有的sed

命令,例如:

sed一fmyscript.sedinput_file,这里myscript•sed即为支持

sed命令的文件。

-i

表不inplaceedit,就地修改文件

1.6.1.多点编辑:

e命令

当编辑指令在命令列上执行时,其前必须加上选项-e。

其命令格式如下:

sed-e•编辑指令1*-e•编辑指令2,...文件档

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

另外,命令上编辑指令的执行是由左而右。

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

例如,删除yel.dat内1至10行资料,并将其馀文字屮的”yellow”字串改成”black”字串。

此时,可将编辑指令直接在命令上执行,其命令如下:

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

在命令中,编辑指令11,10d1执行删除1至10行资料;编辑指令*s/yellow/black/g*,"yellow"字串替换成"black"字串。

$sed-e*1,5d'-e^/test/check/'example

(-e)选项允许在同一行里执行多条命令。

如例子所示,第一条命令删除1至5行,第二条命令用check替换test。

命令的执行顺序对结果有影响。

如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

$sed-expressions^/test/check/*-expression=7love/dfexample

—个比-e更好的命令是--expression。

它能给sed表达式赋值。

1.6.2.直接修改源文件i

sed可以实现内容的编辑后然后保存到一个文件,然后再覆盖原文件的办法。

sed1s/properties/property/g1build.xml>build.xml.tmp

这样,build,xml.tmp文件就是修改后的文件。

如果无误,那么就可以覆盖原文件mvbuild.xml.tmpbuild.xml

如果想直接修改源文件,而不要这样繁琐的过程,可以用下面的命令

sed-i1s/properties/property/g1build.xml

1.7.在sed中使用变量

有吋,我们耑要awk命令中的模式根据脚本上下文的变化而做相应的变化,这吋就S要用一个变最表示。

可以用单引号包含双引号来引用一个变量。

如果我们用一变量var,它的值根据上下文变化

var=”comm”

sed-n7”’$var”7p’/tmp/test.log

Sed-i’3s/eMME/”’$process”’/’start.sh

1.8.sed脚本

#cat_append,sed

#!

/bin/sed-f//sed命令解释行。

脚本在这一行查找sed以运行命令,这里定位在/bin。

|j/Bunny/a\//a\通知sed这是一个附加操作,首先应插入一个新行。

[

'Jack//附加操作要加入到拷W的实际文本)

#chmod+xappend.sed

#./append.sedgrade.tx

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1