楼主: 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
71#
 楼主| 发表于 2006-8-13 18:48 | 只看该作者
9.2.10 字符串屏蔽序列
使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。
打印一新行时,(新行为字符\ n),给出其屏蔽序列,以不失其特殊含义,用法为在字符
串前加入反斜线。例如使用\ n强迫打印一新行。
如果使用正则表达式,查询花括号( { }),在字符前加反斜线,如/ \ { /,将在a w k中失掉其
特殊含义。
表9 - 5列出a w k识别的另外一些屏蔽序列
表9-5 awk中使用的屏蔽序列
\ b 退格键\ t t a b键
\ f 走纸换页\ d d d 八进制值
\ n 新行\ c 任意其他特殊字符,例如\ \为反斜线符号
\ r 回车键
80 第二部分文本过滤
下载
使用上述符号,打印May Day,中间夹t a b键,后跟两个新行,再打印May Day,但这次
使用八进制数1 0 4、1 4 1、1 7 1、分别代表D、a、y。
注意,\ 1 0 4为D的八进制A S C I I码,\ 1 4 1为a的八进制A S C I I码,等等。
9.2.11 awk输出函数printf
目前为止,所有例子的输出都是直接到屏幕,除了t a b键以外没有任何格式。a w k提供函
数p r i n t f,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
每一种p r i n t f函数(格式控制字符)都以一个%符号开始,以一个决定转换的字符结束。
转换包含三种修饰符。
p r i n t f函数基本语法是p r i n t f([格式控制符],参数),格式控制字符通常在引号里。

使用道具 举报

回复
论坛徽章:
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
72#
 楼主| 发表于 2006-8-13 18:49 | 只看该作者
9.2.12 printf修饰符
表9-6 awk printf修饰符
- 左对齐
Wi d t h 域的步长,用0表示0步长
. p r e c 最大字符串长度,或小数点右边的位数
表9-7 awk printf格式
% c A S C I I字符
% d 整数
% e 浮点数,科学记数法
% f 浮点数,例如(1 2 3 . 4 4)
% g a w k决定使用哪种浮点数转换e或者f
% o 八进制数
% s 字符串
% x 十六进制数
1. 字符转换
观察A S C I I码中6 5的等价值。管道输出6 5到a w k。p r i n t f进行A S C I I码字符转换。这里也加
入换行,因为缺省情况下p r i n t f不做换行动作。
当然也可以按同样方式使用a w k得到同样结果。
所有的字符转换都是一样的,下面的例子表示进行浮点数转换后‘ 9 9 9’的输出结果。整
数传入后被加了六个小数点。
2. 格式化输出
第9章AWK 介绍81
下载
打印所有的学生名字和序列号,要求名字左对齐, 1 5个字符长度,后跟序列号。注意\ n
换行符放在最后一个指示符后面。输出将自动分成两列。
最好加入一些文本注释帮助理解报文含义。可在正文前嵌入头信息。注意这里使用p r i n t
加入头信息。如果愿意,也可使用p r i n t f。
3. 向一行a w k命令传值
在查看a w k脚本前,先来查看怎样在a w k命令行中传递变量。
在a w k执行前将值传入a w k变量,需要将变量放在命令行中,格式如下:
awk 命令变量=输入文件值
(后面会讲到怎样传递变量到a w k脚本中)。
下面的例子在命令行中设置变量A G E等于1 0,然后传入a w k中,查询年龄在1 0岁以下的
所有学生。
要快速查看文件系统空间容量,观察其是否达到一定水平,可使用下面a w k一行脚本。因
为要监视的已使用空间容量不断在变化,可以在命令行指定一个触发值。首先用管道命令将
df -k 传入a w k,然后抽出第4列,即剩余可利用空间容量。使用$ 4 ~ / ^ [ 0 - 9 ] /取得容量数值
(1 0 2 4块)而不是d f的文件头,然后对命令行与‘ i f ( $ 4 < T R I G G E R )’上变量T R I G G E R中指定
的值进行查询测试。
在系统中使用df -k命令,产生下列信息:
如果系统中d f输出格式不同,必须相应改变列号以适应工作系统。
当然可以使用管道将值传入a w k。本例使用w h o命令, w h o命令第一列包含注册用户名,
这里打印注册用户,并加入一定信息。
a w k也允许传入环境变量。下面的例子使用环境变量L O G N A M E支持当前用户名。可从
w h o命令管道输出到a w k中获得相应信息。
82 第二部分文本过滤
下载
如果r o o t为当前登录用户,输出如下:
root you are connected to ttyp1
4. awk脚本文件
可以将a w k脚本写入一个文件再执行它。命令不必很长(尽管这是写入一个脚本文件的主
要原因),甚至可以接受一行命令。这样可以保存a w k命令,以使不必每次使用时都需要重新
输入。使用文件的另一个好处是可以增加注释,以便于理解脚本的真正用途和功能。
使用前面的几个例子,将之转换成a w k可执行文件。像原来做的一样,将学生目前级别分
相加awk ‘(t o t + = $ 6) END{print "club student total points:" t o t }’ g r a d e . t x t。
创建新文件s t u d e n t _ t o t . a w k,给所有a w k程序加入a w k扩展名是一种好习惯,这样通过查
看文件名就知道这是一个a w k程序。文本如下:
第一行是! /bin/awk -f。这很重要,没有它自包含脚本将不能执行。这一行告之脚本系统
中a w k的位置。通过将命令分开,脚本可读性提高,还可以在命令之间加入注释。这里加入头
信息和结尾的平均值。基本上这是一个一行脚本文件。
执行时,在脚本文件后键入输入文件名,但是首先要对脚本文件加入可执行权限。
系统中运用的帐号核实程序检验数据操作人的数据输入,不幸的是这个程序有一点错误,
或者应该说是“非文本特征”。如果一个记录被发现包含一个错误,它应该一次只打印一行
第9章AWK 介绍83
下载
“E R R O R *”,但实际上打印了许多这样的错误行。这会给帐号管理员造成误解,因此需要用
a w k脚本过滤出错误行的出现频率,使得每一个失败记录只对应一个错误行。
在a w k实施过滤前先看看部分文件:
a w k脚本如下:
a w k过滤结果如下:
5. 在a w k中使用F S变量
如果使用非空格符做域分隔符( F S)浏览文件,例如# 或:,编写这样的一行命令很容易,
因为使用F S选项可以在命令行中指定域分隔符。
84 第二部分文本过滤
下载
使用a w k脚本时,记住设置F S变量是在B E G I N部分。如果不这样做, a w k将会发生混淆,
不知道域分隔符是什么。
下述脚本指定F S变量。脚本从/ e t c / p a s s w d文件中抽取第1和第5域,通过分号“;”分隔
p a s s w d文件域。第1域是帐号名,第5域是帐号所有者。
6. 向a w k脚本传值
向a w k脚本传值与向a w k一行命令传值方式大体相同,格式为:
awk script_file var=value input_file
下述脚本对比检查文件中域号和指定数字。这里使用了N F变量M A X,表示指定检查的域
号,使用双引号将域分隔符括起来,即使它是一个空格。
如果以/ e t c / p a s s w d作输入文件(p a s s w d文件有7个域),运行上述脚本。参数格式如下:
使用前面一行脚本的例子,将之转换成a w k脚本如下:
文本包括了比实际命令更多的信息,没关系,仔细研读文本后,就可以精确知道其功能
及如何调用它。
不要忘了增加脚本的可执行权限,然后将变量和赋值放在命令行脚本名字后、输入文件
前执行。
第9章AWK 介绍85
下载
同样可以使用前面提到的管道命令传值,下述a w k脚本从d u命令获得输入,并输出块和字
节数。
为运行这段脚本,使用d u命令,并管道输出至a w k脚本。

使用道具 举报

回复
论坛徽章:
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
73#
 楼主| 发表于 2006-8-13 18:49 | 只看该作者
9.2.13 awk数组
前面讲述s p l i t函数时,提到怎样使用它将元素划分进一个数组。这里还有一个例子:
在上面的例子中,s p l i t返回数组m y a r r a y下标数。实际上m y a r r a y数组为:
数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是
一种循环类型的基本结构:
For (element in array ) print array[element]
对于记录“ 1 2 3 # 4 5 6 # 6 7 8”,先使用s p l i t函数划分它,再使用循环打印各数组元素。操作
脚本如下:
数组和记录
86 第二部分文本过滤
下载
要运行脚本,使用/ d e v / n u l l作为输入文件。
上面的例子讲述怎样通过s p l i t函数使用数组。也可以预先定义数组,并使用它与域进行比
较测试,下面的例子中将使用更多的数组。
下面是从空手道数据库卸载的一部分数据,包含了学生级别及是否是成人或未成年人的
信息,有两个域,分隔符为( #),文件如下:
脚本功能是读文件并输出下列信息。
1) 俱乐部中Ye l l o w、O r a n g e和R e d级别的人各是多少。
2 ) 俱乐部中有多少成年人和未成年人。
查看文件,也许2 0秒内就会猜出答案,但是如果记录超过6 0个又怎么办呢?这不会很容
易就看出来,必须使用a w k脚本。
首先看看a w k脚本,然后做进一步讲解。
第9章AWK 介绍87
下载
B E G I N部分设置F S为符号#,即域分隔符,因为要查找Ye l l o w、O r a n g e和R e d三个级别。
然后在脚本中手工建立数组下标对学生做同样的操作。注意,脚本到此只有下标或元素,并
没有给数组名本身加任何注释。初始化完成后, B E G I N部分结束。记住B E G I N部分并没有文
件处理操作。
现在可以处理文件了。首先给数组命名为c o l o r,使用循环语句测试域1级别列是否等于数
组元素之一(Ye l l o w、O r a n g e或R e d),如果匹配,依照匹配元素将运行总数保存进数组。
同样处理数组‘ S e n i o r _ o r _ j u n i o r’,浏览域2时匹配操作满足,运行总数存入j u n i o r或
s e n i o r的匹配数组元素。
E N D部分打印浏览结果,对每一个数组使用循环语句并打印它。
注意在打印语句末尾有一个\符号,用来通知a w k(或相关脚本)命令持续到下一行,当
输入一个很长的命令,并且想分行输入时可使用这种方法。运行脚本前记住要加入可执行权
限。
9.3 小结
a w k语言学起来可能有些复杂,但使用它来编写一行命令或小脚本并不太难。本章讲述了
a w k的最基本功能,相信大家已经掌握了a w k的基本用法。a w k是s h e l l编程的一个重要工具。
在s h e l l命令或编程中,虽然可以使用a w k强大的文本处理能力,但是并不要求你成为这方面的
专家。

使用道具 举报

回复
论坛徽章:
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
74#
 楼主| 发表于 2006-8-13 18:49 | 只看该作者
第10章sed 用法介绍
s e d是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可
能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。s e d可以做些什么呢?
别忘了,Vi也是一个文本编辑器。s e d可以随意编辑小或大的文件,有许多s e d命令用来编辑、
删除,并允许做这项工作时不在现场。s e d一次性处理所有改变,因而变得很有效,对用户来
讲,最重要的是节省了时间。
本章内容有:
• 抽取域。
• 匹配正则表达式。
• 比较域。
• 增加、附加、替换。
• 基本的s e d命令和一行脚本。
可以在命令行输入s e d命令,也可以在一个文件中写入命令,然后调用s e d,这与a w k基本
相同。使用s e d需要记住的一个重要事实是,无论命令是什么, s e d并不与初始化文件打交道,
它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
因为s e d是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。
本章介绍s e d用法和功能。本章大多编写的是一行命令和小脚本。这样做可以慢慢加深对
s e d用法的了解,取得宝贵的经验,以便最终自己编出大的复杂s e d脚本。
和g r e p与a w k一样, s e d是一种重要的文本过滤工具,或者使用一行命令或者使用管道与
g r e p与a w k相结合。

使用道具 举报

回复
论坛徽章:
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
75#
 楼主| 发表于 2006-8-13 18:49 | 只看该作者
10.1 sed怎样读取数据
s e d从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲
区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复
此过程直到命令结束。
10.2 调用sed
调用s e d有三种方式:在命令行键入命令;将s e d命令插入脚本文件,然后调用s e d;将s e d
命令插入脚本文件,并使s e d脚本可执行。
使用s e d命令行格式为:
sed [选项] s e d命令输入文件。
记住在命令行使用s e d命令时,实际命令要加单引号。s e d也允许加双引号。
使用s e d脚本文件,格式为:
sed [选项] -f sed脚本文件输入文件
要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为:
s e d脚本文件[选项] 输入文件
不管是使用s h e l l命令行方式或脚本文件方式,如果没有指定输入文件, s e d从标准输入中
接受输入,一般是键盘或重定向结果。
s e d选项如下:
n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条s e d命令,
此选项无用,但指定它也没有关系。
f 如果正在调用s e d脚本文件,使用此选项。此选项通知s e d一个脚本文件支持所有的s e d
命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . 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
76#
 楼主| 发表于 2006-8-13 18:50 | 只看该作者
10.2.1 保存sed输出
由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件
即可。下面的例子重定向s e d命令的所有输出至文件‘ m y o u t f i l e’,当对结果很满意时使用这
种方法。
10.2.2 使用sed在文件中查询文本的方式
s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
1) 使用行号,可以是一个简单数字,或是一个行号范围。
2 ) 使用正则表达式,怎样构建这些模式请参见第7章。
表1 0 - 1给出使用s e d定位文本的一些方式。
表10-1 使用s e d在文件中定位文本的方式
x x为一行号,如1
x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/ p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
/ p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
x , y ! 查询不包含指定行号x和y的行。1 , 2 !

使用道具 举报

回复
论坛徽章:
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
77#
 楼主| 发表于 2006-8-13 18:50 | 只看该作者
10.2.3 基本sed编辑命令
表1 0 - 2列出了S e d的编辑命令。
表10-2 sed编辑命令
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
90 第二部分文本过滤
下载
(续)
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
如果不特别声明,s e d例子中使用下述文本文件q u o t e . t x t。
10.3 sed和正则表达式
s e d识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特
殊字符,必须使用( \)屏蔽其特殊含义,如有必要请参照第7章正则表达式。第7章使用的所
有正则表达式在s e d中都是合法的。
10.4 基本sed编程举例
下面通过例子实际检验一下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
78#
 楼主| 发表于 2006-8-13 18:50 | 只看该作者
10.4.1 使用p(rint)显示行
p r i n t命令格式为[ a d d r e s s [,a d d r e s s ] P。显示文本行必须提供s e d命令行号。
错误在哪儿?原意只打印第二行,但是却打印了文件中所有行,为此需使用- n选项,显
示打印定位(匹配)行。
10.4.2 打印范围
可以指定行的范围,现打印1到3行,用逗号分隔行号。
第10章sed 用法介绍91
下载
10.4.3 打印模式
假定要匹配单词N e a v e,并打印此行,方法如下。使用模式/ p a t t e r n /格式,这里为/ N e a v e /。
10.4.4 使用模式和行号进行查询
为编辑某个单词浏览一个文件时, s e d返回包含指定单词的许多行。怎样使返回结果更精
确以满足模式匹配呢?可以将行号和模式结合使用。下面这个例子,假定要改动文件q u o t e . t x t
最后一行中的单词t h e,使用s e d查询t h e,返回两行:
使用模式与行号的混合方式可以剔除第一行,格式为l i n e _ n u m b e r, / p a t t e r n /。逗号用来分
隔行号与模式开始部分。为达到预期结果,使用4 , / t h e /。意即只在第四行查询模式t h e,命令
如下:
10.4.5 匹配元字符
匹配元字符$前,必须使用反斜线\屏蔽其特殊含义。模式为/\$/ p。

使用道具 举报

回复
论坛徽章:
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
79#
 楼主| 发表于 2006-8-13 18:50 | 只看该作者
10.4.6 显示整个文件
要打印整个文件,只需将行范围设为第一行到最后一行1 , $。$意为最后一行。
10.4.7 任意字符
匹配任意字母,后跟任意字母的0次或多次重复,并以i n g结尾,模式为/ . * i n g /。可以使用
这个模式查询以i n g结尾的任意单词。
10.4.8 首行
要打印文件第一行,使用行号:
92 第二部分文本过滤
下载
10.4.9 最后一行
要打印最后一行,使用$。$是代表最后一行的元字符。

使用道具 举报

回复
论坛徽章:
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
80#
 楼主| 发表于 2006-8-13 18:50 | 只看该作者
10.4.10 打印行号
要打印行号,使用等号=。打印模式匹配的行号,使用格式/ p a t t e r n / =。
整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用- e选项。
如果只打印行号及匹配行,必须使用两个s e d命令,并使用e选项。第一个命令打印模式
匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。
10.4.11 附加文本
要附加文本,使用符号a \,可以将指定文本一行或多行附加到指定行。如果不指定文本放
置位置, s e d缺省放在每一行后面。附加文本时不能指定范围,只允许一个地址模式。文本附
加操作时,结果输出在标准输出上。注意它不能被编辑,因为s e d执行时,首先将文件的一行
文本拷贝至缓冲区,在这里s e d编辑命令执行所有操作(不是在初始文件上),因为文本直接
输出到标准输出,s e d并无拷贝。
要想在附加操作后编辑文本,必须保存文件,然后运行另一个s e d命令编辑它。这时文件
的内容又被移至缓冲区。
附加操作格式如下:
地址指定一个模式或行号,定位新文本附加位置。a\ 通知s e d对a \后的文本进行实际附加
操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。s e d执行到这儿,将创
建一新行,然后插入下一文本行。最后一行不加斜划线, s e d假定这是附加命令结尾。
当附加或插入文本或键入几个s e d命令时,可以利用辅助的s h e l l提示符以输入多行命令。
这里没有这样做,因为可以留给使用者自己编写,并且在一个脚本文件中写这样的语句更适
宜。现在马上讲述s e d脚本文件。另外,脚本可以加入空行和注释行以增加可读性。

使用道具 举报

回复

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

本版积分规则 发表回复

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