楼主: bnso

Linux Shell介绍

[复制链接]
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
81#
 楼主| 发表于 2006-8-13 18:51 | 只看该作者
10.4.12 创建sed脚本文件
要创建脚本文件a p p e n d . s e d,输入下列命令:
保存它,增加可执行权限:
运行,
如果返回‘ file not found’,试在脚本前加入. \。
现在查看其具体功能。第一行是s e d命令解释行。脚本在这一行查找s e d以运行命令,这里
定位在/ b i n。
第二行以/ c o m p a n y /开始,这是附加操作起始位置。a \通知s e d这是一个附加操作,首先
应插入一个新行。第三行是附加操作要加入到拷贝的实际文本。
输出显示附加结果。如果要保存输出,重定向到一个文件。
10.4.13 插入文本
插入命令类似于附加命令,只是在指定行前面插入。和附加命令一样,它也只接受一个
地址。下面是插入命令的一般格式。地址是匹配模式或行号:
下面例子在以a t t e n d a n c e结尾的行前插入文本utter confusion followed。
运行结果是:
94 第二部分文本过滤
下载
也可以使用行号指定文本插入位置,插入位置在模式或指定行号4之前

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
82#
 楼主| 发表于 2006-8-13 18:51 | 只看该作者
10.4.14 修改文本
修改命令将在匹配模式空间的指定行用新文本加以替代,格式如下:
将第一行The honeysuckle band played all night long for only $90替换为The office Di b b l e
band played well。首先要匹配第一行的任何部分,可使用模式‘ / H o n e y s u c k l e /’。s e d脚本文
件为c h a n g e . s e d。内容如下:
运行它,不要忘了给脚本增加可执行权限。chmod u+x change.sed。
像插入动作一样,可以使用行号代替模式,两种方式完成相同的功能。
可以对同一个脚本中的相同文件进行修改、附加、插入三种动作匹配和混合操作。
下面是一个带有注释的脚本例子。
第10章sed 用法介绍95
下载
运行它,结果如下:
10.4.15 删除文本
s e d删除文本格式:
[ a d d r e s s [,a d d r e s s ] ] d
地址可以是行的范围或模式,让我们看几个例子。
删除第一行;1 d意为删除第一行。
删除第一到第三行:
删除最后一行:
也可以使用正则表达式进行删除操作。下面的例子删除包含文本‘ N e a v e’的行。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
83#
 楼主| 发表于 2006-8-13 18:52 | 只看该作者
10.4.16 替换文本
替换命令用替换模式替换指定模式,格式为:
[ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
s选项通知s e d这是一个替换操作,并查询p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
换它。
替换选项如下:
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
p 缺省s e d将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出
结果。
w 文件名使用此选项将输出定向到一个文件。
96 第二部分文本过滤
下载
让我们看几个例子。替换n i g h t为N I G H T,首先查询模式n i g h t,然后用文本N I G H T替换
它。
要从$ 9 0 中删除$ 符号(记住这是一个特殊符号,必须用\ 屏蔽其特殊含义),在
r e p l a c e m e n t - p a t t e r n部分不写任何东西,保留空白,但仍需要用斜线括起来。在s e d中也可以这
样删除一个字符串。
要进行全局替换,即替换所有出现模式,只需在命令后加g选项。下面的例子将所有T h e
替换成Wo w!。
将替换结果写入一个文件用w选项,下面的例子将s p l e n d i d替换为S P L E N D I D的替换结果
写入文件s e d . o u t:
注意要将文件名括在s e d的单引号里

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
84#
 楼主| 发表于 2006-8-13 18:52 | 只看该作者
10.5 使用替换修改字符串
如果要附加或修改一个字符串,可以使用( &)命令,&命令保存发现模式以便重新调用
它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,
然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在
匹配模式之前。例如, s e d语句s/nurse/"Hello"&/p 的结果如下:
原句是文本行The local nurse Miss P.Neave was in attendance。
记住模式中要使用空格,因为输出结果表明应加入空格。
还有一个例子:
原句是The honeysuckle band played all night long for only $90。相信这种修改动作已经讲
解得很清楚了。
10.6 将sed结果写入文件命令
像使用>文件重定向发送输出到一个文件一样,在s e d命令中也可以将结果输入文件。格
式有点像使用替换命令:
第10章sed 用法介绍97
下载
[ a d d r e s s [,address]]w filename
‘w’选项通知s e d将结果写入文件。f i l e n a m e是自解释文件名。下面有两个例子。
文件q u o t e . t x t输出到屏幕。模式范围即1,2行输出到文件f i l e d t。
下面例子中查询模式N e a v e,匹配结果行写入文件f i l e d h t。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
85#
 楼主| 发表于 2006-8-13 18:52 | 只看该作者
10.7 从文件中读文本
处理文件时, s e d允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在
模式匹配行后,格式为:
address r filename
这里r通知s e d将从另一个文件源中读文本。f i l e n a m e是其文件名。
现在创建一个小文件s e d e x . t x t,内容如下:
将s e d e x . t x t内容附加到文件q u o t e . t x t的拷贝。在模式匹配行/ c o m p a n y /后放置附加文本。本
例为第三行。注意所读的文件名需要用单引号括起来。
10.8 匹配后退出
有时需要在模式匹配首次出现后退出s e d,以便执行其他处理脚本。退出命令格式为:
address q
下面的例子假定查询模式/ . a . * /,意为任意字符后跟字符a,再跟任意字符0次或任意多次。
查看文本文件,然后在下列行产生下列单词:
查询首次出现模式,然后退出。需要将q放在s e d语句末尾。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
86#
 楼主| 发表于 2006-8-13 18:52 | 只看该作者
10.9 显示文件中的控制字符
当从其他系统下载文件时,有时要删除整个文件的控制字符(非打印字符),从菜单中捕
获一个应用的屏幕输出有时也会将控制字符输出进文件,怎样知道文件中是否有控制字符?
使用cat -v filename命令,屏幕会乱叫,且到处都是一些垃圾字符,这可以确知文件中包含有
控制字符,如果有兴趣可以观察一下这些字符以便于更加确认它们是控制字符。
一些系统中使用cat filename而不是c a t - v来查看非打印字符。
s e d格式为:
[ a d d r e s s,[ a d d r e s s ] ] l
‘l’意为列表。
一般情况下要列出整个文件,而不是模式匹配行,因此使用l要从第一到最后一行。模式
范围1,$即为此意。
如果c a t一个文件,发现实际上包含有控制字符。
现在运行s e d命令,观察输出结果。
s e d找到并显示了两个控制字符。\ 0 3 3代表退格键,O P为F 1键值,放在退格键后。第二行
也是如此。
各系统控制字符键值可能不同,主要取决于其映射方式(例如使用t e r m i n f o或t e r m c a p)。
如果要在文本文件中插入控制字符F 1键,使用v i查看其键值,操作如下:
• 启动v i。
• 进入插入模式。
• 按下< C t r l >键,然后按< v >键(出现a ^)。
• 释放上述两个键。
• 按下F 1键(显示[ O P ]。
• 按下< E S C >键(显示F 1键值)。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
87#
 楼主| 发表于 2006-8-13 18:52 | 只看该作者
10.10 使用系统sed
前面已经讲述了s e d的基本功能,但是在脚本或命令行中使用s e d真正要做的是修改或删除
文件或字符串中文本。下面运用前面学过的知识讲述这一点。
10.10.1 处理控制字符
使用s e d实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。
下面是传送过来的文件( d o s . t x t)的部分脚本。必须去除所有可疑字符,以便于帐号所有
者使用文件。
第10章sed 用法介绍99
下载
可采取以下动作:
1) 用一个空格替换所有的( # #)符号。
2) 删除起始域中最前面的0(0 0)。
3) 删除行尾控制字符( ^ M)。
一些系统中,回车符为^ @和^ L,如果遇到一些怪异的字符,不必担心,只要是在行尾并
且全都相同就可以。
按步执行每一项任务,以保证在进行到下一任务前得到理想结果。使用输入文件d o s . t x t。
任务1。删除所有的#字符很容易,可以使用全局替换命令。这里用一个空格替换两个或
更多的#符号。
任务2。删除所有行首的0。使用^符号表示模式从行首开始, ^ 0 *表示行首任意个0。模式
s / ^ 0 * / / g设置替换部分为空,即为删除模式,正是要求所在。
任务3。最后去除行尾^ M符号,为此需做全局替换。设置替换部分为空。模式为:
‘s / ^ m / / g’,注意‘^ M’,这是一个控制字符。
要产生控制字符( ^ M),需遵从前面产生F 1键同样的处理过程。步骤如下;键入sed s/,
然后按住< C t r l >键和v键,释放v键,再按住^键,并保持< C t r l >键不动,再释放两个键,最后
按< r e t u r n >键。下面命令去除行尾^ M字符。
分步测试预想功能对理解整个过程很有帮助。用s e d在移到下一步前测试本步功能及结果
很重要。如果不这样,可能会有一大堆包含怪异字符的意料外的结果。
将所有命令结合在一起,使用管道将c a t命令结果传入一系列s e d命令, s e d命令与上面几
步精确过滤字符的s e d相同。
现在文件对帐号管理者可用。
可以将命令放在文件里,然后运行它。下面即为转换脚本。
100 第二部分文本过滤
下载
通过仅指定一个s e d命令可以将命令行缩短,本书后面部分介绍脚本中s e d的用法。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
88#
 楼主| 发表于 2006-8-13 18:53 | 只看该作者
10.10.2 处理报文输出
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做
一些整理,下面是一个s q l查询结果。
为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下
操作:
1) 使用s / - * / / g删除横线- - - - - -。
2) 使用/ ^ $ / d删除空行。
3) 使用$ d删除最后一行
4) 使用1 d删除第一行。
5) 使用awk {print $1}打印第一列。
命令如下,这里使用了c a t,并管道传送结果到s e d命令。
10.10.3 去除行首数字
对接下来卸载的这个文件实施的操作是去除行首所有数字,每个记录应以U N H或U N D开
头,而不是U N H或U N D前面的数字。文件如下:
使用基本正则表达式完成这个操作。[ 0 - 9 ]代表行首任意数字,替换部分为空格是为了确
保删除前面的匹配模式,即数字。
第10章sed 用法介绍101
下载
10.10.4 附加文本
当帐户完成设置一个文件时,帐号管理者可能要在文件中每个帐号后面加一段文字,下
面是此类文件的一部分:
任务是在每一行末尾加一个字符串‘ p a s s e d’。
使用$命令修改各域会使工作相对容易些。首先需要匹配至少两个或更多的数字重复出现,
这样将所有的帐号加进匹配模式。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
89#
 楼主| 发表于 2006-8-13 18:53 | 只看该作者
10.10.5 从shell向sed传值
要从命令行中向s e d传值,值得注意的是用双引号,否则功能不执行。
10.10.6 从sed输出中设置shell变量
从s e d输出中设置s h e l l变量是一个简单的替换过程。运用上面的例子,创建s h e l l变量
N E W- N A M E,保存上述s e d例子的输出结果。
10.11 快速一行命令
下面是一些一行命令集。([ ]表示空格, [ ]表示t a b键)
‘s / \ . $ / / g’ 删除以句点结尾行
‘-e /abcd/d’ 删除包含a b c d的行
‘s / [ ] [ ] [ ] * / [ ] / g’ 删除一个以上空格,用一个空格代替
‘s / ^ [ ] [ ] * / / g’ 删除行首空格
‘s / \ . [ ] [ ] * / [ ] / g’ 删除句点后跟两个或更多空格,代之以一个空格
‘/ ^ $ / d’ 删除空行
‘s / ^ . / / g’ 删除第一个字符
‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母
‘s / ^ \ / / / g’ 从路径中删除第一个\
‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代
‘S / ^ [ ] / / g’ 删除行首所有t a b键
‘s / [ ] * / / g’ 删除所有t a b键
102 第二部分文本过滤
下载
在结束这一章前,看看一行脚本的一些例子。
1. 删除路径名第一个\符号
将当前工作目录返回给s e d,删除第一个\:
2. 追加/插入文本
将"Mr Wi l l i s "字串返回给s e d并在M r后而追加" B r u c e "。
3. 删除首字符
s e d删除字符串“a c c o u n t s . d o c”首字符。
4. 删除文件扩展名
s e d删除“a c c o u n t s . d o c”文件扩展名。
5. 增加文件扩展名
s e d附加字符串“. d o c”到字符串“a c c o u n t s”。
6. 替换字符系列
如果变量x含有下列字符串:
如果要实现下列转换:
s e d命令是:
10.12 小结
s e d是一个强大的文本过滤工具。使用s e d可以从文件或字符串中抽取所需信息。正像前面
讲到的,s e d不必写太长的脚本以取得所需信息。本章只讲述了s e d的基本功能,但使用这些功
能就可以执行许多任务了。
如果使用s e d对文件进行过滤,最好将问题分成几步,分步执行,且边执行边测试结果。
经验告诉我们,这是执行一个复杂任务的最有效方式。

使用道具 举报

回复
论坛徽章:
49
NBA季后赛之星
日期:2014-10-19 19:51:33蓝锆石
日期:2014-10-19 19:51:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33指数菠菜纪念章
日期:2014-10-19 19:52:33问答徽章
日期:2014-04-15 10:41:44优秀写手
日期:2014-07-24 06:00:11保时捷
日期:2014-10-19 19:51:33三菱
日期:2014-10-19 19:51:33
90#
 楼主| 发表于 2006-8-13 18:53 | 只看该作者
第11章合并与分割
几年前,我习惯于使用运行在终端的P I C K操作的U N I X集合,我实际使用P I C K应用的大
部分时间花费在分类与连接过程中,且使用极其频繁。很幸运我没有成为一个全职的P I C K操
作员。
有几种工具用来处理文本文件分类、合并和分割操作,本章详细介绍这些工具。
本章内容有:
• 实用的分类(s o r t)操作。
• uniq。
• join。
• cut。
• paste。
• split。
11.1 sort用法
s o r t命令将许多不同的域按不同的列顺序分类。当查阅注册文件或为另一用户对下载文件
重排文本列时, s o r t工具很方便。实际上,使用其他U N I X工具时,已假定工作文件已经被分
过类。无论如何,分类文件比不分类文件看起来更有意义。
11.1.1 概述
U N I X / L I N U X自带的s o r t功能很强大。尽管有时在使用s o r t各种不同的选项时人们已经很
小心,但仍会产生意想不到的结果。s o r t选项很长,甚至有时在各种不同开关的实际功能和结
果进行比较时也会遇到麻烦,原因可能是在结合使用s o r t的不同选项时有些概念模糊不清。
本章不讨论各种不同的s o r t方法(不能说s o r t不够强大;它很慢,但观察数值交替变化是
很有趣的)也不讨论各种不同开关的结合使用功效。本章只讲到主要的s o r t选项,伴随有大量
实例。与s o r t结合使用的u n i q、j o i n、c u t和p a s t e方法与s p l i t方法也将会涉及到。
上面提到, s o r t命令选项很长,下面介绍本章使用的各种选项。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表