第 2 章 基本unix实用程序

43
第2第 第第 UNIX 第第第第

Upload: akeem-pitts

Post on 03-Jan-2016

57 views

Category:

Documents


6 download

DESCRIPTION

第 2 章 基本UNIX实用程序. 基本实用程序. 主要是一些文本文件的处理程序 例: more , cat , sort , grep 举例 sort sort file1 file2. 实用程序的特点. 特点 不指定文件名时,从标准输入获得数据 指定文件名时,从文件中获取数据 可以同时指定多个文件 处理结果在标准输出显示 考虑的因素 标准输入 / 标准输出 shell 的文件通配符 输入输出 重定向 管道. more/pg/less :逐屏显示文件. 历史 more :最先由 BSD UNIX 开发 pg :最先由 AT&T UNIX 开发 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 2 章  基本UNIX实用程序

第 2 章 基本 UNIX 实用程序

Page 2: 第 2 章  基本UNIX实用程序

第 2 章 第 2页

基本实用程序 主要是一些文本文件的处理程序

例: more , cat , sort , grep 举例

sortsort file1 file2

Page 3: 第 2 章  基本UNIX实用程序

第 2 章 第 3页

实用程序的特点 特点

不指定文件名时,从标准输入获得数据指定文件名时,从文件中获取数据可以同时指定多个文件处理结果在标准输出显示

考虑的因素标准输入 / 标准输出shell 的文件通配符输入输出重定向管道

Page 4: 第 2 章  基本UNIX实用程序

第 2 章 第 4页

more/pg/less :逐屏显示文件 历史

more :最先由 BSD UNIX 开发pg :最先由 AT&T UNIX 开发less : Linux 上广泛使用

使用方法more server.c 指定一个文件more *.[ch] 指定多个文件ls -l | more 指定 0 个文件pg *.[ch] less a.c

Page 5: 第 2 章  基本UNIX实用程序

第 2 章 第 5页

more满屏后,显示 --more-- 或 --more--(15%) ,可以使用 more 命令:空格 显示下一屏

回车 上滚一行,当所感兴趣的段落内容正好处于当前屏的尾部,另有一部分在下一页中时,可以连续按回车,将感兴趣的部分滚动上来

q (quit)退出程序,后面的内容不再显示

/pattern 搜索指定模式的字符串,模式描述用正则表达式

/ 继续查找指定模式的字符串

h (Help)帮助信息。打印more命令的所有功能列表

Ctrl-L 屏幕刷新

Page 6: 第 2 章  基本UNIX实用程序

第 2 章 第 6页

pg显示满屏后,屏幕最后一行为冒号 (:) 提示符,显示暂停pg 的每个命令后要按回车键回车 下一屏

l 上滚一行

q 退出

/pattern 查找指定模式的字符串,模式描述用正则表达式规则

/ 继续查找

h (help)帮助信息

Ctrl-L 屏幕刷新

Page 7: 第 2 章  基本UNIX实用程序

第 2 章 第 7页

more 与 pg more 比 pg 少按键, pg 的每个命令要比 more 多

按回车键 man 命令使用 more,pg 或者 less

System V 一般默认 pg 为 man 的分屏浏览器系统管理员可以自行设定

more 命令还有许多扩展功能可以后退回去浏览那些已经浏览过的页不同系统扩展功能会有些差距。 ls –l | more

比 more server.c 回退浏览功能受到限制more 命令比 Windows 系统中的同名命令的

功能强得多

Page 8: 第 2 章  基本UNIX实用程序

第 2 章 第 8页

less LINUX 系统中的命令 less

回退浏览的功能更强可直接使键盘的上下箭头键,或者 j,k ,类似

vi 的光标定位键,以及 PgUp , PgDn ,或者 Ctrl-F , Ctrl-B , Home , End 键

许多系统不提供 less 命令,但是可利用 more 命令的增强功能

Page 9: 第 2 章  基本UNIX实用程序

第 2 章 第 9页

cat 与 od , hd :列出文件内容 基本功能与命名

cat concatenate: 串结,文本格式打印od octal dump 八进制打印( -c, -x 选项)hd hex dump, 十六进制打印

举例cat tryl.c 命令行参数 1 个cat tryl.c tryx.c try.h 命令行参数 3 个cat >try 命令行参数 =0 个,从 stdin 获取数据,直到 ctrl-dod -x x.dat 以十六进制打印文件 x.dat 各字节hd x.dat | more 以十六进制打印文件 x.dat 各字节echo abcdABCD | hd 十六进制显示 8 个字符的 ASCII 码cat tryl.c try2.c try.h > trysrccat makefile *.[ch] > src

Page 10: 第 2 章  基本UNIX实用程序

第 2 章 第 10页

head 与 tailhead -15 ab.c 显示文件 ab.c 中前 15 行head -23 a.c b.c c.c | more 显示三个文件各自的前 23 行共显示 69 行tail -10 liu.mailtail -f debug.txt 实时打印文件尾部被追加的内容(选项 -f:forever )netstat -s -p tcp | head -14ls -s | sort | head -10

Page 11: 第 2 章  基本UNIX实用程序

第 2 章 第 11页

wc :字计数( word count ) 功能

列出文件中一共有多少行,有多少个单词,多少字符当指定的文件数大于 1 时,最后还列出一个合计常用选项 -l :只列出行计数

举例wc sum.c ( 1 个文件)wc x.c makefile stat.sh (多个文件)wc -l *.c makefile start.shps -ef | wc -l ( 0 个)ps -ef | grep liang | wc -l ( 0 个)who | wc -l ( 0 个)

Page 12: 第 2 章  基本UNIX实用程序

第 2 章 第 12页

sort :对文件内容排序 sort 选项

可以选择行中某一部分作为排序关键字选择升序或降序取消相同内容的行字符串比较时对字母是否区分大小写-n 选项( Numberic ),对于数字按照算术值大小

排序,而不是按照字符串比较规则 举例

sort telno > telno1ls -s | sort | tail –10ls -s | sort -n | tail –10

Page 13: 第 2 章  基本UNIX实用程序

第 2 章 第 13页

tee :三通 功能

将从标准输入 stdin 得到的数据抄送到标准输出 stdout 显示,同时存入磁盘文件中

应用举例 ./myap | tee myap.log

Page 14: 第 2 章  基本UNIX实用程序

第 2 章 第 14页

正则表达式的概念 正则表达式 Regular Expressions 应用范围

字符串匹配操作和替换操作举例: UNIX 中的 vi more pg grep yacc lex awk其他: Turbo Pascal/Visual C/Word等等

正则表达式的功能描述一个字符串模式

注意正则表达式规则与文件名通配符规则不同

正则表达式规则用于文本处理的场合文件名匹配规则用于文件处理的场合

不同软件对正则表达式的定义可能会有些不同

Page 15: 第 2 章  基本UNIX实用程序

第 2 章 第 15页

正则表达式的特殊字符(元字符) 6 个元字符

. * [ \ ^ $ 其它字符与其自身匹配 转义

用反斜线可以取消特殊字符的特殊含义。如:正则表达 end\. 只与字符串 end.匹配

Page 16: 第 2 章  基本UNIX实用程序

第 2 章 第 16页

单字符正则表达式 长的正则表达式由单字符正则表达式构成的 非特殊字符与其自身匹配

如: a与 a,b与 b 转义字符( \ )

\. \* \$ \^ \[ \\ 圆点( · )

匹配任意单字符

Page 17: 第 2 章  基本UNIX实用程序

第 2 章 第 17页

单字符正则表达式:定义集合 (1) 基本用法

在一对方括号之间的字符为集合的内容,如:单字符正则表达式 [abcd] 与 a 或 b,c,d 匹配

圆点 ,星号,反斜线在方括号内时,代表它们自己如 :[\*.] 可匹配 3 个单字符

Page 18: 第 2 章  基本UNIX实用程序

第 2 章 第 18页

单字符正则表达式:定义集合 (2) 用减号 - 定义一个区间

如 [a-d] [A-Z] [a-zA-Z0-9]减号在最后,则失去表示区间的意义

[ad-] 只与 3 个字符匹配 用 ^ 表示补集

^在开头 ,则表示与集合内字符之外的任意字符匹配如: [^a-z] 匹配任一非小写字母

^不在开头 ,则失去其表示补集的意义如: [a-z^] 能匹配 27个单字符

Page 19: 第 2 章  基本UNIX实用程序

第 2 章 第 19页

单字符正则表达式的组合 (1) 串结

如 abc , [A-Z].[0-9]· 星号( * )

单字符正则表达式后跟 * ,匹配此单字符正则表达式的 0次或任意多次出现

例 : 正则表达式 12*4与字符串 1234 不匹配,与 1224 , 12224 , 14匹配

例 : 正则表达式 [A-Z][0-9]*此例中 * 作用的单字符正则表式为 [0-9] ,代表

[A-Z] [A-Z][0-9] [A-Z][0-9][0-9] [A-Z][0-9][0-9][0-9] ,等等

与 A,A1,C45,D768匹配,与 b64512,T56t 不匹配

Page 20: 第 2 章  基本UNIX实用程序

第 2 章 第 20页

单字符正则表达式的组合 (2) 例:正则表达式 [Cc]hapter *[1-4]

在 * 号前有一个空格,允许数字 1-4之前有多个或者 0 个空格。可匹配 Chapter2, chapter 3等等。

例:正则表达式 a\[i] *= *b\[j] *\* *c\[k]匹配字符串 a[i]=b[j]*c[k] ,容许等号和星号两侧有空格

Page 21: 第 2 章  基本UNIX实用程序

第 2 章 第 21页

正则表达式: $ 与 ^

$ 在尾部时有特殊意义,否则与其自身匹配例: 123$ 匹配文件中行尾的 123 ,不在行尾的 12

3 字符不匹配例: $123与字符串 $123匹配 例: .$ 匹配行尾的任意字符

^ 在首部时有特殊意义,否则与其自身匹配 例: ^printf匹配行首的 printf 字符串,不在行首的

printf 串不匹配例: Hel^lo与字符串 Hel^lo匹配例:在 vi 中使用 :10,50s/^ //g

删除 10-50 行的每行行首的 4 个空格

Page 22: 第 2 章  基本UNIX实用程序

第 2 章 第 22页

grep 在文件中查找字符串 命名 grep ( Global regular expression print ) 语法 grep 模式 文件名列表 举例

grep O_RDWR *.hps -ef | grep liangwho | grep liangls -l | grep '^d' | wc –lgrep '[0-9]*' chapter1grep '[0-9][0-9]*' chapter1

Page 23: 第 2 章  基本UNIX实用程序

第 2 章 第 23页

egrep 在文件中查找字符串 (1) 特点:用扩展的正则表达式描述模式

圆括号 () : 表示分组表示逻辑或的符号 |与星号地位类似的 + 和 ?

* 号表示它左边的单字符正则表达式的 0 次或多次重复+号表示 1 次或多次?表示 0 次或一次

模式举例(xy)* 可匹配空字符串, xy , xyxy , xyxyxy(pink|green) 与 pink 或 green匹配[0-9]+ 不匹配空字符串,匹配长度至少为 1 数字串a? 匹配零个或一个 a

Page 24: 第 2 章  基本UNIX实用程序

第 2 章 第 24页

egrep 在文件中查找字符串 (2) 命令举例

egrep '(SEEK_|IPC_)' *.hegrep '[0-9]:[0-9][0-9] (client|server)$‘egrep '[0-9]+' chapter1

Page 25: 第 2 章  基本UNIX实用程序

第 2 章 第 25页

grep/egrep/fgrep egrep

在指定模式方面比 grep 更灵活,但算法需要更多的处理时间

fgrep :快速 grep按字符串搜索而不是按模式搜索。fgrep运算速度快,适合于从大量的数据中进行检索指定字符串,不可按模式查找

Page 26: 第 2 章  基本UNIX实用程序

第 2 章 第 26页

grep/fgrep/egrep 选项 选项

-n 显示时每行前面显示行号-v 显示所有不包含模式的行-i 字母比较时忽略字母的大小写

例: grep -n __DATE__ *.c查找含有正则表达式 __DATE__的行,并打印行号当文件数超过一个时,除了输出行号,还输出文件名

例: grep -v '[Dd]isable' dev.stat>dev.active取消文件中所有含有指定模式的行,生成新文件

例: grep -i richard telnos在文件中检索字符串 richard ,不顾字母的大小写

Page 27: 第 2 章  基本UNIX实用程序

第 2 章 第 27页

UNIX 命令界面风格 (1) UNIX 的 grep 命令

共有十几个选项,选项以减号开头丰富的选项,为命令提供了丰富的功能选择命令行参数提供处理对象及命令选项程序开始运行后,不再需要任何其它的交互式输入

交互式命令界面输入 grep 命令,按下回车键程序开始执行。程序提示:“输入待查找的模式 :” ,等待用户输入。问:“显示时每行前加行号吗 ?” ,等待输入 Y或者 N问:“模式匹配时忽略英文字母的大小写吗 ?” ,等待输

入……问题都回答完后,提示“请输入文件名 :” ,等待输入处理结束后,再问:“还需要查找其它的文件吗?”

Page 28: 第 2 章  基本UNIX实用程序

第 2 章 第 28页

UNIX 命令界面风格 (2) 两种界面风格的比较

交互式问答,界面非常友好,简单易用可以改进上面的问答,组织成菜单的形式,用户选择设置一些必要的开关

当系统变得非常复杂时,使用命令方式更有效交互式输入不便于把命令用于批处理程序,文件名通配

符,重定向和管道功能与其它的命令协同工作图形界面和命令行界面

Page 29: 第 2 章  基本UNIX实用程序

第 2 章 第 29页

awk :文本处理语言a.w.k 分别为该程序的三位设计者姓氏的第一个字母

用法awk '程序 ' 文件名列表awk -f 程序文件名 文件名列表程序:条件{动作}

处理方式输入文件的每行作为一个“记录”,变量 NR就是行号每行用空格分隔开的部分,叫做记录的“域”变量 $1 是第 1域内容,依次, $2 是第 2域内容,……特别的, $0 指的是整个这一行的内容awk 的处理为:符合条件的行,执行相应的动作

Page 30: 第 2 章  基本UNIX实用程序

第 2 章 第 30页

awk 的内置变量 变量

NR 当前记录的记录编号( No. of Record )$0 当前记录$1, $2, …… 当前记录中的域FILENAME 当前输入的文件名

Page 31: 第 2 章  基本UNIX实用程序

第 2 章 第 31页

awk 描述条件的方法 (1) 不指定任何条件

对文本文件的所有行进行处理 使用与 C 语言了类似的关系算符

< 小于 <= 小于或等于== 等于 != 不等于> 大于 >= 大于或等于|| 条件或 && 条件与

Page 32: 第 2 章  基本UNIX实用程序

第 2 章 第 32页

awk 描述条件的方法 (2) 正则表达式的模式匹配 /regexpr/

在文本文件所有行中检索模式 特殊的条件: BEGIN和 END

BEGIN :开始处理所有文本行之前执行END :处理完所有文本行之后执行

Page 33: 第 2 章  基本UNIX实用程序

第 2 章 第 33页

awk 描述动作的方法描述“动作”时,简单的用法有

print 变量 1 , 变量 2 ,……Printf(” 格式串”,变量 1 ,变量 2 ,…… )

Page 34: 第 2 章  基本UNIX实用程序

第 2 章 第 34页

awk 举例 (1)$ ps -ef | grep guest guest 669 668 0 11:27:13 ttyp1 00:00:00 -sh guest 678 669 0 11:27:18 ttyp1 00:00:00 vi$ ps -ef | awk '/guest/{ printf "%s ",$2 }‘669 678$ cat test.c | awk '{printf "%d: %s\n",NR,$0 }' 1: main()2: {3: printf("Hello!\n");4: }

Page 35: 第 2 章  基本UNIX实用程序

第 2 章 第 35页

awk 举例 (2)$ date Thu May 27 22:02:22 BEIDT 2004$ date | awk '{print $4}'22:02:42$ who zhang ttylb Sep 29 11:20liang ttyla Sep 29 11:53zhang ttylf Sep 29 12:04feng tty1c Sep 29 12:54$ who | awk '/^ *zhang / {printf("%s ", $2)}' tty1b tty1f $$ ls -s | awk '$1 > 2000 { print $2 }' disk.imgdocument.pdflinux-src.tar.Zpppd.log$

Page 36: 第 2 章  基本UNIX实用程序

第 2 章 第 36页

awk 举例 (3)$ cat list.awk BEGIN { printf("=====================================\n") printf("FILENAME %s\n", FILENAME) printf("-------------------------------------\n")}END { printf("====================================\n") }{ printf("%3d: %s\n", NR, $0) }$ awk -f list.awk md5.c =====================================FILENAME md5.c------------------------------------- 1: 2: #include "md5.h"……298: buf[2] += c;299: buf[3] += d;300: }301:====================================

Page 37: 第 2 章  基本UNIX实用程序

第 2 章 第 37页

sed :流编辑 用法

sed '命令 ' 文件名列表sed -f 命令文件 文件名列表

例tail -f pppd.log|sed 's/145\.37\.23\.26/QiaoXi/g'tail -f pppd.log | sed -f sed.cmd

其中 sed.cmd 文件s/145\.37\.23\.26/QiaoXi/gs/102\.157\.23\.109/LiuYin/g s/145\.37\.123\.57/DaTun/g

Page 38: 第 2 章  基本UNIX实用程序

第 2 章 第 38页

tr :翻译字符 用法

tr string1 string2把 stdin拷贝到 stdout , string1 中出现的字符替换为 strin

g2 中的对应字符 例

cat telnos | tr UVX uvx 例:用[]指定一个集合

cat report | tr '[a-z]' '[A-Z]' 将小写字母改为大写字母

例:用 \ 加三个八进制数字 ( 类似 C 语言 ) 表示一字符cat file1 | tr % '\012' 将 %改为换行符 注意不要漏掉必需的单引号

Page 39: 第 2 章  基本UNIX实用程序

第 2 章 第 39页

两文件逐字节比较: cmp 用法

cmp file1 file2

功能逐字节比较两个文件是否完全相同两个文件完全相同时,不给出任何提示两个文件不同时,打印出第一个不同之处在 Windows 中有类似的命令 COMP

Page 40: 第 2 章  基本UNIX实用程序

第 2 章 第 40页

求出两个文件的差别: diff 用法

diff file1 file2

功能比较两个版本的源程序文件,以寻找两者间差别Windows 下类似功能的 FC 命令( File Comparison ) ,

常用 /N 选项,列出时打印行号发现不同,就列出一个如何将 file1转化为 file2 的指令

这些指令有 a ( Add ), cc (( Change )和 dd ( Delete )

指令字母左边的行号是 file1 的行号,右面是 file2 的行号列出内容时,大于号后边的内容是需要在 file1 文件中增加的内容;小于号后边的内容是需从 file1 中删除的内容

Page 41: 第 2 章  基本UNIX实用程序

第 2 章 第 41页

cmp 和 diff 举例$ cmp f1.c f2.cf1.c f2.c differ: char 69, line 3$ diff f1.c f2.c3,5d2< tmp->vm_mm = mm;< mm->map_count++;< tmp->vm_next = NULL;260c257< i = (i+1) * 8 * sizeof(long);---> i = i * 8 * sizeof(long);528c525< p->swappable = 1;---> p->swappable = 0;548a546,547> retval = p->pid;> p->tgid = retval;

Page 42: 第 2 章  基本UNIX实用程序

第 2 章 第 42页

由命令 diff 产生的文件转化指令

指令 如何将文件 file1转化为文件 file2

l1aal2,l3> file2 第 l2~l3 行内容

将 file2 的第 l2~l3 行追加到 file1 的第 l1 行之后

l1,l2ccl3,l4< file1 第 l1~l2 行内容---> file2 第 l3~l4 行内容

将 file1 的第 l1~l2 行换成 file2 的第 l3~l4 行

l1,l2ddl3< file1 第 l1~l2 行内容

将 file1 的第 l1~l2 行删除后,就与 file2 第 l3 行以后内容相同

Page 43: 第 2 章  基本UNIX实用程序

第 2 章 第 43页

diff 命令常用的选项 -b

逐行比较两个文件时忽略每行结尾处的多余空格 -e

为 UNIX 的行编辑程序 ed生成脚本文件。 ed 命令使用这个脚本文件编辑 file1 文件,就可以变成文件 file2