《UnixShell实例精解》学习笔记.docx

上传人:b****6 文档编号:13050390 上传时间:2023-06-10 格式:DOCX 页数:46 大小:38.73KB
下载 相关 举报
《UnixShell实例精解》学习笔记.docx_第1页
第1页 / 共46页
《UnixShell实例精解》学习笔记.docx_第2页
第2页 / 共46页
《UnixShell实例精解》学习笔记.docx_第3页
第3页 / 共46页
《UnixShell实例精解》学习笔记.docx_第4页
第4页 / 共46页
《UnixShell实例精解》学习笔记.docx_第5页
第5页 / 共46页
《UnixShell实例精解》学习笔记.docx_第6页
第6页 / 共46页
《UnixShell实例精解》学习笔记.docx_第7页
第7页 / 共46页
《UnixShell实例精解》学习笔记.docx_第8页
第8页 / 共46页
《UnixShell实例精解》学习笔记.docx_第9页
第9页 / 共46页
《UnixShell实例精解》学习笔记.docx_第10页
第10页 / 共46页
《UnixShell实例精解》学习笔记.docx_第11页
第11页 / 共46页
《UnixShell实例精解》学习笔记.docx_第12页
第12页 / 共46页
《UnixShell实例精解》学习笔记.docx_第13页
第13页 / 共46页
《UnixShell实例精解》学习笔记.docx_第14页
第14页 / 共46页
《UnixShell实例精解》学习笔记.docx_第15页
第15页 / 共46页
《UnixShell实例精解》学习笔记.docx_第16页
第16页 / 共46页
《UnixShell实例精解》学习笔记.docx_第17页
第17页 / 共46页
《UnixShell实例精解》学习笔记.docx_第18页
第18页 / 共46页
《UnixShell实例精解》学习笔记.docx_第19页
第19页 / 共46页
《UnixShell实例精解》学习笔记.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《UnixShell实例精解》学习笔记.docx

《《UnixShell实例精解》学习笔记.docx》由会员分享,可在线阅读,更多相关《《UnixShell实例精解》学习笔记.docx(46页珍藏版)》请在冰点文库上搜索。

《UnixShell实例精解》学习笔记.docx

《UnixShell实例精解》学习笔记

《UnixShell实例精解》学习笔记

ByTurner

第一章关于UNIXShell的介绍

1.定义

shell是一种特殊的程序,被用作用户与内核(kernel)的UNIX操作系统核心

通讯。

常见的shell有Cshell、Bshell和Kornshell(Bshell的超集)。

2.shell主要功能

●解释交互运行时,在命令行提示下敲入的命令

●制订用户环境,通常在shell初始化文件中作这种工作。

例如:

设置终端键及窗口特征;设置搜索路径、权限、提示等

●shell可以用作解释编程语言。

Shell程序也叫命令表,由再文件中列出的命令组成。

3.主要shell命令:

whomvrmwclscatdateat

lprrshmoreawkpwdbcvifingerw

pgfindcccpddgrepkshsh

pssedcallp

第2章UNIX工具箱

1.正则表达式

一个正则表达式就是用来在一次搜索中匹配相同字符的一个字符模式。

在大

多数程序中,把一个正则表达式封装在正斜杠(/)里。

2.正则表达式元字符

元字符

功能

实例

解释

^

行开头定位

/^love/

与所有love开头的行匹配

$

行末尾定位

/love$/

与所有love结尾的行匹配

.

匹配单个字符

/l..e/

与包含一个l,后跟两个字符,然后跟一个e的行相匹配

*

跟前驱的0个或多个字符相匹配

/*love/

跟0个或多个空格后面的love模式的行相匹配

[]

与其中的一个相匹配

/[Ll]ove/

与包含love或者Love的行匹配

[x-z]

与集中一个范围内的一个字符相匹配

/[A-Z]ove/

与后面跟ove的从A到Z的字相匹配

[^]

与不在集里的字符匹配

/[^A-Z]ove/

不包括A到Z,后面跟ove的字相匹配

\

给一个元字符转移

/love\./

匹配行包括love,跟一个句点

许多用RE元字符的UNIX程序支持的附加元字符(vi和grep支持)

\<

词开头定位

/\

匹配行包含用love开头的词

\>

词结尾定位

/love\>/

匹配行包含love结尾的词

\(..\)

标志与以后用的字符相匹配

/(love\)able\ler/

Able可达9个标志,模式最左边用第一个标志开始。

例如,模式love保存作标志l,以后引用作\l;在这个例子中,搜索模式包括后面跟lover的lovable

x\{m\}

x\{m,\}

x\{m,n\}

字符x重复m次

至少m次

m到n次

O\{5,10\}

如果行包含5—10个连续的o则匹配

表(2.1)

3.举例

查找文件中的含有love的词:

%vipicnic

Ihadalovelytimeonourlittlepicnic.Loverswereallaroundus,ohlove

:

/love/

4.组合正则表达式元字符

文件内容:

(数字是行号,竖线标明行的左右边界,不属于文件内容。

这个文件我写在shell/exam/exam_2.9中)

1|ChristianScottliveshereandwillputonaChristmasparty.|

2|Therearearound30to35peopleinvited.|

3|Theyare:

|

4|Tom|

5|Dan|

6|RhondaSavage|

7|NickyandKimerly.|

8|Steve,Suzanne,GingerandLarry.|

组合举例:

/^[A-Z]..$/

搜索行以A至Z的一个字母开头,然后跟两个任意字母,然后跟一个换行符的行。

将找到第5行。

/^[A-Z][a-z]*3[0-5]/

搜索以一个大写字母开头,后跟0个或多个小写字母,再跟数字3,再跟0—5之间的一个数字。

*[A-Z][a-z][a-z]$/

搜索以0个或多个空格开头,跟一个大写字母,两个小写字母和一个换车符。

将找到第4行的TOM(整行匹配)和第5行。

注意,*前面有一个空格。

/^[A-Za-z]*[^,][A-Za-z]*$/

将查找以0个或多个大写或小写字母开头,不跟逗号,然后跟0个或多个大写或小写字母,然后跟一个换车符。

将找到第5行。

书中解释有误。

5.更多的正则表达式元字符

这里讨论的元字符不一定可以移植到所有的正则表达式中,但一般可以用在vi、sed和grep中。

%vitextfile

-----------------------------------------------------------------------

Pattywonfourthplaceinthe50yarddashsquareandfair.

Occurenceslikethisarerare.

Haha,whatyouwantisjustfourth.

~

~

:

/\/

将查找词fourth

第3章grep家族

1.grep的含义是“全局搜索正则表达式(RE)并打印该行”

2.grep支持的正则表达式

与在文件中搜索基本一样。

可以参考表2.1。

3.grep的选项

选项

功能

-b

在各行之前放置它发现的块号。

有时在根据上下文定位磁盘字块时有用

-c

显示匹配行数而不是内容

-h

不显示文件名

-I

在座比较时忽略字母大小写

-n

文件中每行之前给出它的相关行号

-s

无声操作。

即除了错误消息外不做任何显示。

用于检查退出状态

-v

把搜索翻转为只显示不匹配的行

-w

把表达式当作一个次来搜索,相当于用\<和\>括起来

表3.1

4.grep命令的退出状态

如果grep操作成功,则状态是0,如果模式没找到,状态是1,如果文件没

找到,状态是2。

如果操作被取消,则状态是130。

查看状态的方法:

在csh

中用echo$status。

在sh和ksh中用echo$?

例如

$echo$?

0

5.带正则表达式的grep举例:

用于这些例子的文件叫datafile,位于chap03目录。

内容如下:

northwestNWCharlesMain3.0.98334

westernWESharonGray5.3.97523

southwestSWLewisDalsass2.7.8218

southernSOSuanChin5.1.95415

southeastSEPatriciaHemenway4.0.7417

easternEATBSavage4.4.84520

northeastNEAMMainJr.5.1.94313

northNOMargotWeber4.5.8959

centralCTAnnStephens5.7.94513

1)grepNWdatafile

解释:

打印datafile中包含NW的行

2)grepNWd*

解释:

打印所有以d开头的文件中含有NW的文件。

3)grep'^n'datafile

解释:

打印文件datafile中所有以字母n开头的行

4)grepTBSavagedatafile

解释:

在Savage和datafile文件中查找有TB的行

5)grep'TBSavage'datafile

解释:

在datafile文件中查找含有TBSavage的行并打印。

这个例子在书中有误。

6)grep'^[we]'datafile

打印datafile中以w或者e开头的行

7)grep'ss*'datafile

northwestNWCharlesMain3.0.98334

southwestSWLewisDalsass2.7.8218

解释:

打印所有包含一个s并跟0个或者多个s,然后跟一个空格的行

6.用管道的grep

grep可以从管道得到输入。

%ls–l

drwxr-xr-x6oracledba5124月321:

49chap10

drwxr-xr-x2oracledba5124月1022:

23exam

-rwxr--r--1oracledba18424月321:

51readme.txt

-rwxr--r--1oracledba18014月321:

51unix_readme.txt

%ls–l|grep'^d'

drwxr-xr-x6oracledba5124月321:

49chap10

drwxr-xr-x2oracledba5124月1022:

23exam

%ls-l|grep'^[^d]'

-rwxr--r--1oracledba18424月321:

51readme.txt

-rwxr--r--1oracledba18014月321:

51unix_readme.txt

7.带选项的grep举例:

grep–c‘west’datafile

3

解释计算datafile中含有west的总数。

8.egrep(扩展的grep)

egrep可以使用额外的正则表达式,如下表。

元字符

功能

例子

解释

+

匹配一个或多个前驱字符

'[a-z]+ove'

匹配一个或多个小写字母,后跟ove

?

匹配0个或者1个前驱字符

'lo?

ve'

将找到love或love

a|b

匹配a或者b

'love|hate'

与love或hate匹配

()

组字符

'lov(ely|able)

与lovely或lovable匹配

表3.2

9.egrep举例:

egrep'2\.?

[0-9]'datafile

解释:

打印所有这样的行:

它包含一个2,后跟0个或者一个句号,然后跟一个数字。

10.fgrep

fgrep把所有的元字符都当作字符本身,只代表自己。

11.UNIX工具试验参考答案(内容参考datebook)

●打印包含San的行

grep'San'datebook

●打印所有以J开头的人名所在的行

grep'^J'datebook

●打印以700结尾的行

grep'700$'datebook

●打印所有不包含834的行

grep-v'834'datebook

●打印出生在12月(December)的行

grep'/12'datebook

●打印工资是6位数的行,并给出行号

grep-n'[0-9]\{6,\}$'datebook

第4章流编辑器(sed)

1.sed命令简介

sed是流线型、非交互式编辑器。

它允许你执行与vi和ex编辑器里一样的编辑任务。

Sed程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。

2.sed如何工作

sed编辑器按一次处理一行的方式来处理文件,并把输出送到屏幕上。

3.sed可以用寻址的方式来决定想要编辑哪一行。

4.sed命令和选项

命令

功能

a\

在当前行上添加一个文本行或者多个文本行

c\

用新闻本改变(取代)当前行里的文本

d

删除行

i\

在当前行之前插入文本

h

把模式空间内容复制到一个固定缓存

H

把模式空间内容添加到一个固定缓存

g

得到固定缓存里所有的禀复制到模式缓存,重写其内容

G

得到固定缓存的内容并复制到模式缓存,添加到里面

I

列出不打印的字符

p

打印行

n

读下一输入行,并开始用下一个命令处理换行符,而不是用第一个命令

q

结束或退出sed

r

从一个文件读如行

!

把命令应用到除了选出的行以外的其他所有行

s

把一个字串替换成另一个

替换标志

g

在一行上进行全局替换

p

打印行

w

把行写到一个文件中

x

用模式空间的内容交换固定缓存的内容

y

把一个字符转换成另一个(不能和整则表达式元字符一起使用)

5.sed元字符

基本上,grep和vi使用的元字符都可以用在sed中。

具体可参照第二章。

下表列出了一些特别的sed元字符:

元字符

功能

例子

解释

&

保存搜索串以便可以记在替换串里

s/love/**&**/

&号代表搜索串。

串love将被星号包围的自身所替代;即love变成**love**

6.sed的实例(使用datafile)

1>打印:

p命令

sed'/north/p'datafile

默认输出所有行,找到north的行重复打印

sed–n'/north/p'datafile

禁止默认输出,只打印找到north的行

2>删除:

d命令

sed'3d'datafile

删除第三行,其余行输出到屏幕

sed'3,$d'datafile

从第3行到最后一行都删除,将剩余部分输出到屏幕

sed'/north/d'datafile

将含有north的行删除,其余输出到屏幕

3>替换:

s命令

sed's/west/north/g'datafile

解释:

找到datafile中的所有west并替换成north,将替换后的内容输出到屏幕。

sed's/[0-9][0-9]$/&.5/'datafile

解释:

在替代串里的&字符代表在搜索串中真正找到的。

每个以两个数字结尾的行都被它自己取代,且要在后面加上.5

sed-n's/Hemenway/Jones/gp'datafile

解释:

所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。

-n与p命令选项相结合来禁止默认输出。

g代表全局替换

sed-n's/\(Mar\)got/\1ianne/p'datafile

解释:

模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。

在替换串里它将被引用做\1。

然后用Marianne替代Margot。

sed's#3#88#g'datafile

s命令后面的字符是搜索串和替换串之间的分界符。

默认的分界符是一个正斜杠,但也可以改变(只有使用s命令时)。

无论s命令后面跟什么字符,它都是新的串分界符。

当搜索包含一个正斜杠的模式,如路径或生日时,这种技巧可能有用

4>被选中的行的范围:

逗号

sed-n'/west/,/east/p'datafile

打印在west和east之间的模式范围内所有行。

如果west出现在east之后,则打印从west到下一个east或者到文件末尾的行,无论哪种情况先出现都可以。

sed'/west/,/east/s/$/**VACA**/'datafile

解释:

对于在模式west到east范围内的行,行末尾将用**VACA**来取代。

5>多次编辑-e选项

sed-e'1,3d'-e's/Hemenway/Jones/'datafile

-e选项允许多次编辑。

不同的编辑顺序可能导致不同的结果。

例如,如果两个命令都执行了替换,第一次替换可能影响第二次替换。

6>从文件中读取:

r命令

sed'/Suan/rnewfile'datafile

解释:

r命令从newfile中读取内容,将内容输出到Suan的后面。

如果datafile中Suan出现的次数不只一次,则分别放到Suan的后面。

7>写入文件:

w命令

sed-n'/north/wnewfile'datafile

解释:

w命令把指定的行写入到一个文件。

本例中所有的包含north的行写入到newfile中。

等同于sed-n'/north/p'datafile>newfile

8>添加:

a命令

$sed'/north/a\

>---->THENORTHSALESDISTRICTHASMOVED<-----'datafile

northwestNWCharlesMain3.0.98334

---->THENORTHSALESDISTRICTHASMOVED<-----

westernWESharonGray5.3.97523

southwestSWLewisDalsass2.7.8218

southernSOSuanChin5.1.95415

southeastSEPatriciaHemenway4.0.7417

easternEATBSavage4.4.84520

northeastNEAMMainJr.5.1.94313

---->THENORTHSALESDISTRICTHASMOVED<-----

northNOMargotWeber4.5.8959

---->THENORTHSALESDISTRICTHASMOVED<-----

centralCTAnnStephens5.7.94513

解释:

红颜色的内容是要输入的内容。

a\命令后面跟要添加的内容。

奇怪的是a\后面必须另起一行,在输入要添加的内容,否则会提示命令错乱,真是搞不懂。

9>插入:

i命令

$sed'/north/i\

>---->THENORTHSALESDISTRICTHASMOVED<-----'datafile

---->THENORTHSALESDISTRICTHASMOVED<-----

northwestNWCharlesMain3.0.98334

westernWESharonGray5.3.97523

southwestSWLewisDalsass2.7.8218

southernSOSuanChin5.1.95415

southeastSEPatriciaHemenway4.0.7417

easternEATBSavage4.4.84520

---->THENORTHSALESDISTRICTHASMOVED<-----

northeastNEAMMainJr.5.1.94313

---->THENORTHSALESDISTRICTHASMOVED<-----

northNOMargotWeber4.5.8959

centralCTAnnStephens5.7.94513

解释:

在符合模式的行前面插入内容。

其余和a\命令相同。

10>下一个:

n命令

$sed'/eastern/{n;s/AM/Archie/;}'datafile

northwestNWCharlesMain3.0.98334

westernWESharonGray5.3.97523

southwestSWLewisDalsass2.7.8218

southernSOSuanChin5.1.95415

southeastSEPatriciaHemenway4.0.7417

easternEATBSavage4.4.84520

northeastNEArchieMainJr.5.1.94313

……

解释:

如果在某一行里模式eastern被匹配,n命令使sed区的下一行,用该行带换模式空间,用Archie替换AM,打印并继续。

11>变换:

y命令

sed'1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/'datafile

解释:

将对应字母进行转换。

12>退出:

q命令

sed'5q'datafile

解释:

在打印了5行之后,用q命令退出sed程序。

13>保存和取得:

h和G命令

$sed-e'/southeast/h'-e'$G'datafile

northwestNWCharlesMain3.0.98334

westernWESharonGray5.3.97523

southwestSWLewisDalsass2.7.8218

southernSOSuanChin5.1.95415

southeastSEPatriciaHemenway4.0.7417

easternEATBSavage4.4.84520

northeastNEAMMainJr.5.1.94313

northNOMargotWeber4.5.8959

centralCTAnnStephens5.7.94513

southeastSEPatriciaHemenway4.0.7417

解释:

当sed处理文件时,每行都存在模式空间(patternspace)的临时缓存中。

除非行被禁止打印或删除,否则行将在处理完后被打印到屏幕,然后请模式空间并把下一输入行保存在那里等待处理。

在这个例子中,在找到模式之后,把它放在模式空间里,而且h命令复制它并把它存到另一个叫做保存缓存(holdingbuffer)中。

第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并放回模式空间缓存,添加到当前存在那里的行中。

本例子就是最后一行。

$sed-e'/WE/{h;d;}'-e'/CT/G'datafile

northwestNWCharlesMain3.0.98334

southwestSWLewisDalsass2.7.8218

so

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2