Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1822119
  • 博文数量: 116
  • 博客积分: 9934
  • 博客等级: 上将
  • 技术积分: 1881
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-22 09:16
文章分类

全部博文(116)

文章存档

2007年(43)

2006年(73)

我的朋友

分类:

2006-07-20 09:38:46

文件: unix shell.pdf
大小: 382KB
下载: 下载
文件: awk.PDF
大小: 881KB
下载: 下载
文件: sed.PDF
大小: 705KB
下载: 下载
shell学习精华资料总结

 

()     sed常用命令:........................................................................................ 1

()     常用实例详解........................................................................................ 10

()     shell精解............................................................................................... 10

()     Awk详解............................................................................................... 11

()     Sed详解................................................................................................. 11

()     疑难杂症................................................................................................ 11

 

 

常用命令:

1.:

 用法:

 

lable

 

在脚本中标记一行,用于实现由bt的控制转移。Label最多可以包含7个字符

 

2=

用法:

 

=[address]=

 

将所寻址的行编写到标准输出

 

3a

用法:

 

[address]a

 

text

 

在与address匹配的每行后面追加text。如果text多于一行,必须用反斜杠将这些行前面的换行符“隐藏”起来。Text将被没有用这种方法隐藏的第一个换行符结束。Text在模式空间中是不可用的并且后续的命令不能应用于它。当编辑命令的列表用完时,这个命令的结果将被输送到标准输出,而不管在模式空间中的当前行发生了什么。

 

4b

用法:

 

[address1[,address2]]b[label]

 

无条件地将控制转移到脚本的其他位置的:label处。也就是说,label后面的命令是应用于当前行的下一个命令。如果没有指定label, 控制将一直到达脚本的末端,因此不再有命令作用于当前行。

 

5c

用法:

 

[address1[,address2]]c

 

text

 

text替代(改变)由地址选定的行。当指定的是一个行范围时,将所有的这些行作为一个组由text的一个副本来替代。每个text行后面的换行符必须用反斜杠将其转义,但最后一行除外。实际上,模式空间的内容被删除,因此后续的命令不能应用于它(或应用于text

 

6d

用法:

 

[address1[,address2]]d

 

从模式空间中删除行。因此行没有传递到标准输出。一个新的输入行被读取,并用脚本的第一个命令来编辑。

 

7D

用法:

 

[address1[,address2]]D

 

删除由命令N创建的多行模式空间中的一部分(直到嵌入的换行符),并且用脚本的第一条命令恢复编辑。如果这个命令使模式空间为空,那么将读取一个新的输入行,和执行了d命令一样。

 

8g

用法:

 

[address1[,address2]]g

 

将保持空间(参见hH命令)中的内容复制到模式空间中,并将当前的内容清除。

 

9G

用法:

 

[address1[,address2]]G

 

将换行符后的保持空间(参见hH命令)内容追加到模式空间。如果保持空间为空,则将换行符添加到模式空间。

 

10h

用法:

 

[address1[,address2]]h

 

将模式空间的内容复制到保存空间,即一个特殊的临时缓冲区。保存空间的当前内容被清除。

 

11H

[address1],address2]]H

 

将换行符和模式空间的内容追加到保持空间中,即使保持空间为空,这个命令也追加换行符。

 

12i

用法:

 

[address1]i

 

text

 

text插入到每个和address匹配的行的前面

 

13l

用法:

 

[address1[,address2]]l

 

列出模式空间的内容,将不可打印的字符表示为ASCII码。长的行被折行。

 

14n

用法:

 

[address1[,address2]]n

 

读取下一个输入行到模式空间。当前行被送到标准输出。新行成为当前行并递增行计数器。将控制转到n后面的命令,而不是恢复到脚本的顶部。

 

15N

用法:

 

[address1[,address2]]N

 

将下一个输入行追加到模式空间的内容之后;新添加的行与模式空间的当前内容用换行符分隔(这个命令用于实现跨两行的模式匹配。利用n来匹配嵌入的换行符,则可以实现多行匹配模式)。

 

16p

用法:

 

[address1[,address2]]p

 

打印所寻址的行。注意这将导致输出的重复,除非默认的输出用”#n”或”-n”命令行选项限制。常用于改变流控制(d,n,b)的命令之前并可能阻止当前行被输出。

 

17P

用法:

 

[address1[,address2]]P

 

打印由命令N创建的多行模式空间的第一部分(直接嵌入的换行符)。如果没有将N应用于某一行则和p相同。

 

18q

用法:

 

[address]q

 

当遇到address时退出。寻址的行首先被写到输出(如果没有限制默认输出),包括前面的ar命令为它追加的文本。

 

19r

用法:

 

[address]r file

 

读取file的内容并追加到模式空间内容的后面。必须在r和文件名file之间保留一个空格。

 

20s

用法:

 

[address1[,address2]]s/pattern/replacement/[flags]

 

replacement代替每个寻址的pattern。如果使用了模式地址,那么模式//表示最后指定的模式地址。可以指定下面的标志:

 

       n 替代每个寻址的行的第n/pattern/N1512之间的任意数字,并且默认值为1

 

       g 替代每个寻址的行的所有/pattern/,而不只是第一个

 

       p 如果替换成功则打印这一行。如果成功进行了多个替换,将打印这个行的多个副本。

 

       w file 如果发生一次替换则将这行写入file。最多可以打开10个不同的file

 

replacement是一个字符串,用来替换与正则表达式匹配的内容.replacement部分,只有下列字符有特殊含义:

 

    &  用正则表达式匹配的内容进行替换

 

    n 匹配第n个子串(n是一个数字),这个子串以前在pattern中用"("")"指定.

 

      当在替换部分包含""符号(&),反斜杠()和替换命令的定界符时可用转义它们.另外,它用于转义换行符并创建多行replacement字符串.

 

数字标志

 

s/pattern/replacememt/flag

 

如果flag是数字, 那么指定对一行上某个位置的匹配.如果没有数字标志,则替换命令只替换第一个匹配串,因此"1"可以被看作是默认的数字标志.

 

替换元字符是反斜杠()、与符号(&)n

反斜杠一般用于转义其他的元字符,但是它在替换字符串中也用于包含换行符。

例如对于如下的行:

column1(制表符)column2(制表符)column3(制表符)column4

使用如下替换语句:

s/制表符/

/2

注意,在反斜杠的后面不允许有空格。这个脚本产生下面的结果:

column1(制表符)column2

column3(制表符)column4

 

""符号(&)作为元字符表示模式匹配的范围,不是被匹配的行.例如下面的命令:

s/UNIX/s-2&s0/g

可以将输入行:

on the UNIX Operating System.

替换成:

on the s-2UNIXs0 Operating System.

当正则表达式匹配单词的变化时,""符号特别有用.它允许指定一个可变的替换字符串.诸如"See Section 1.4""See Section 12.9"的引用都应该出现在圆括号中,如"(See Section 12.9)".正则表达式可以匹配数字的不同组合,所以在替换字符串中可以使用"&"并括起所匹配的内容:

s/See Section [1-9][0-9]*.[1-9][0-9]*/(&)/

这里""符号用于在替换字符串中引用整个匹配内容.

 

n元字符用于选择被匹配的字符串的任意独立部分,并且在替换字符串中回调它.在sed中转义的圆括号括住正则表达式的任意部分并且保存以备回调.一行最多允许保存9次.例如,当节号出现在交叉引用中时要表示为用粗体:

s/(See Section )([1-9][0-9]*.[1-9][0-9]*)/1fB2fp/

再来看另外一个例子:

$ cat test1

first:second

one:two

$ sed 's/(.*):(.*)/2:1/ test1

second:first

two:one

 

21t

用法:

 

[address1[,address2]]t[label]

 

测试在寻址的行范围内是否成功执行了替换,如果是,则转移到有label标志的行(参见b:)。如果没有给出label,控制将转移到脚本的底部。

 

22w

用法:

 

[address1[,address2]]w file

 

将模式空间的内容追加到file。这个动作是在遇到命令时发生而不是在输出模式空间内容时发生。必须在w和这个文件名之间保留一个空格。在脚本中可以打开的最大文件数是10。如果文件不存在,这个命令将创建一个文件。如果文件存在,则每次执行脚本时将改写其内容,多重写入命令直接将输出写入到同一个文件并追加到这个文件的末端。

 

23x

用法:

 

[address1[,address2]]x

 

交换模式空间和保持空间的内容。

 

24y

用法:

 

[address1[,address2]]y/abc/xyz/

 

按位置将字符串abc中的字符替换成字符串xyz中相应字符。

 

 

1、倒序显示:sed '1!G;h;$!d' filename 说明如下:

 

假定要处理的文件有n行,当前行为m行。
m=1时,这三个命令执行完毕后,

pattern space
内容:第二行的内容

hold space
内容:第一行的内容

......
依次执行到第m行后

pattern space
内容:第m+1行的内容

hold space
内容:前m行的内容的倒序排放

......
m=n时,也就是说执行到第n-1行之后,

pattern space
内容:第n行的内容

hold space
内容:前n-1行的内容的倒序排放

此时在执行这三个命令:

1!G -- 
hold space的内容附加于pattern space中的第n行之后

       pattern space
内容变为前n行的内容的倒序排放

h    -- 
pattern space内容覆盖 hold space的内容

       hold space
内容变为前n行的内容的倒序排放(较先前多了文件最后一行的内容
)
$!d  -- 
不执行

此时没有下一行了,将pattern space中的内容输出。

 

精解

Unix Shell 实例精解》学习笔记 见附件(属转载的资料)

 

详解

       awk.pdf(属转载的资料)

详解

       sed.pdf(属转载的资料)

以后补充,如有疑问,可发邮件给我jdaoyou@sohu.com,我尽力解答

阅读(4611) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~