1 / 22

第二章 基本 UNIX 实用程序

第二章 基本 UNIX 实用程序. 主要是一些文本文件的处理程序 例 :more,cat,sort,grep. 特点: (1) 当不指定文件名时,从标准输入获得数据。 (2) 当指定文件名时,从文件中获取数据 , 而且可以同时指定多个文件。 (3) 处理结果在标准输出显示. 举例 : sort sort file1 file2. 为什么将实用程序设计的具有这些特点 ?. 考虑下列因素 : 标准输入 / 标准输出 shell 的文件通配符 输入输出重定向 管道. more 与 pg: 逐屏显示文件.

Download Presentation

第二章 基本 UNIX 实用程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 基本UNIX实用程序 主要是一些文本文件的处理程序 例:more,cat,sort,grep 特点: (1)当不指定文件名时,从标准输入获得数据。 (2)当指定文件名时,从文件中获取数据, 而且可以同时指定多个文件。 (3)处理结果在标准输出显示 举例: sort sort file1 file2

  2. 为什么将实用程序设计的具有这些特点? 考虑下列因素: 标准输入/标准输出 shell的文件通配符 输入输出重定向 管道

  3. more与pg:逐屏显示文件 more:最先由BSD UNIX开发,pg:最先由AT&T UNIX开发。 使用方法: more server.c 指定一个文件 more *.[ch] 指定多个文件 ls -l | more 指定0个文件 pg *.[ch] (1) more显示满屏后, 屏幕最后行反转显示--more--或--more--(15%)。 当显示暂停之后,可以使用下列命令: 空格--下屏 <CR>--上滚一行 q--quit /pattern<CR>--搜索指定模式的字符串,模式描述使用正则表达式。 /<CR>继续查找指定模式的字符串 h--help Ctrl-L--redraw,屏幕刷新,在vi中也使用Ctrl-L。

  4. more与pg:逐屏显示文件(续) (2)pg显示满一屏后,屏幕最后一行为冒号(:)提示符,显示暂停, 等待按键命令: <CR> --下一屏 l<CR>--上滚一行 q<CR>--退出 h<CR>--help Ctrl-L<CR>--redraw,屏幕刷新 /pattern<CR>查找指定模式的字符串,模式描述用正则表达式规则 /<CR>继续查找。 (3)两命令比较 more比pg少按键(pg要比more多按回车键,每个命令后面都要加回车后才执行) man命令也使用more或pg。 系统管理员可以设定man命令中使用more或pg, 将文件/etc/default/man中的PAGER=/usr/bin/pg行 改为PAGER=usr/bin/more

  5. cat与od,hd:列出文件内容 cat--concatenate:串结,文本格式打印 od--octal dump八进制打印 hd--hex dump,十六进制打印 例:cat tryl.c 命令行参数:1个 cat tryl.c tryx.c try.h 命令行参数:3个 cat >try 命令行参数=0个,从stdin获取数据,直到ctrl-d od -x x.dat 以十六进制打印文件x.dat各字节 hd x.dat | more 以十六进制打印文件x.dat各字节 echo abcdABCD | hd 十六进制显示8个字符的ASCII码 例: root[15]#echo abcdABCD | hd 0000 61 62 63 64 41 42 43 44 0a abcdABCD. 0009 root[16]#

  6. head与tail head -15 ab.c 显示文件ab.c中前15行 head -23 a.c b.c c.c | more 显示三个文件各自的前23行共显示69行 netstat -s -p tcp | head -14 tail -10 liu.mail ls -s | sort | head -10 例: netstat -p tcp -s | head -7 tcp: 342142 packets sent 337859 data packets (327736229 bytes) 8 data packets (9280 bytes) retransmitted 2876 ack-only packets (593 delayed) 23 URG only packets 6 window probe packets

  7. wc: 字计数word count 可以列出文件中一共有多少行,有多少个单词,多少字符 当指定的文件数大于1时,最后还列出一个合计. 例:wc sum.c (1个文件) wc x.c makefile stat.sh (多个文件) 选项-l:只列出行计数 wc -l *.c makefile start.sh ps -ef | wc -l (0个) ps -ef | grep liang | wc -l (0个) who | wc -l (0个) 例: wc *.c 1183 2303 32600 fterm.c 520 984 13802 keys.c 43 71 876 mycat.c 22 38 579 prt.c 1183 2303 32600 tmpfterm.c 1163 2568 24888 vt100.c 4114 8267 105345 total

  8. sort: 对文件内容排序 例: sort telnos>namesorted sort score | head -5 ls -s | sort 将文件按大小排序。 例: root[23]#ls -s | sort | tail -10 106 prt 116 sz.Z 130 rz.Z 152 vt100test.log 162 mycat 176 a.out 190 vt100 388 fixterm 990 fixterm.tar total 3144 root[24]#

  9. tee:三通 将从stdin得到的数据在stdout显示的同时存入磁盘文件中。 例: ifvl2 -trace3 | tee debug.txt 在实时显示的同时,又存盘入文件debug.txt myapp | tee myapp.log

  10. 正则表达式的概念 正则表达式Regular Expressions广泛应用于字符串的匹配和替换中 如:UNIX命令中的vi more pg grep egrep yacc lex 其他:Turbo Pascal/Visual C/Word 等等 正则表达式用于描述一个字符串模式,在模式匹配操作中使用。 注意:正则表达式规则与文件名匹配规则是不同的。一般来说,正则表达式规则用于文本处理的场合,文件名匹配规则用于文件处理的场合。

  11. 正则表达式的特殊字符 共6个 . * [ \ ^ $ 除此之外的其它字符与其自身匹配 用反斜线可以取消特殊字符的特殊含义(转义).如:正则表达end\.只与字符串end.匹配

  12. 单字符正则表达式 长的,复杂的正则表达式是由单字符正则表达式构成的. (1)非特殊字符与其自身匹配 如:a与a,b与b (2)转义字符(\):在特殊字符前,缀以反斜线,则丧失字符的特殊含义,与其自身匹配 \. \* \$ \^ \[ \\ (3)圆点(·)匹配任意单字符

  13. 单字符正则表达式:定义集合 ·在[与]之间的字符为集合的内容, 如:单字符正则表达式[abcd]与a或b,c,d匹配 ·用减号定义一个区间 如[a-d] [A-Z] [a-zA-Z0-9] 若减号在最后,则失去表示区间的意义, 如:[ad-]只与3个字符匹配 ·可以用^表示补集 若^在开头,则表示与集合内字符之外的任意其它单字 符匹配,如:[^a-z]匹配任一非小写字母。 若^不在开头,则失去其表示补集的特殊意义。 如:[a-z^]能匹配27个单字符 . 圆点,星号,反斜线在方括号内时,代表它们自己 如:[\*.]可以匹配3个单字符

  14. 单字符正则表达式的组合 • (1)串结:如abc, [A-Z].[0-9]· • (2)星号(*):单字符正则表达式后跟*,则匹配此单字符正则表达式的0次或任意多次出现 • 例1:12*4 1234 不匹配 • 1224 匹配 • 2224 匹配 • 14 匹配 • 例2: 正则表达式[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,T546t不匹配

  15. 正则表达式:$与^ (1) $只有出现在正则表达式最尾部时才有特殊意义,否则与其自身匹配 例1: 123$ 则匹配文件中行尾的123,不在行尾的123字符与正则表达式123$不匹配。 例2: $123与字符串$123匹配 (2)^只有出现在正则表达式最首部时才有特殊意义,否则与其自身匹配 例1:正则表达式^printf匹配行首的printf字符串不在行首的printf串不匹配。 例2:正则表达式Hel^lo与字符串Hel^lo匹配 例3:在vi中使用:10,50s/^//g 删除10-50行的每行行首的4个空格。

  16. grep在文件中查找字符串 grep---- Global regular expression print 语法:grep 模式文件名列表 grep O_RDWR *.h ps -ef | grep liang ls -l / | grep '^d' | wc -l 例:ls -l drwxr-xr-x 9 root root 512 Jul 11 13:33 api drwxr-x--- 4 root sys 512 Jul 11 13:33 develop drwxr-xr-x 2 root root 1024 Jul 11 13:33 m3 -rw-r--r-- 1 root other 821 Nov 1 1999 makefile drwxr-xr-x 2 root root 512 Jul 11 13:33 mod drwxr-xr-x 2 root other 512 Jul 11 13:33 sdlc drwxr-xr-x 3 root other 1024 Jul 26 14:09 tool drwxr-xr-x 2 root other 512 Jul 11 13:33 tty -rw------- 1 root sys 1838 Sep 27 11:10 vl2_acn.c drwxr-xr-x 2 root root 512 Jul 11 13:33 vla -rw------- 1 root sys 73506 Sep 27 11:10 vlk.c -rw------- 1 root sys 6873 Sep 27 11:10 vlrd.c

  17. egrep和fgrep • egrep • 在描述模式时,还可以用 | + () 等 • + 两个模式表达式串结 • | 多个模式的逻辑或 • () 用括号括起的内容表示分组 • 例:egrep 'SEEK_.*|O_.|IPC_.*' *.h • ps -ef | egrep ’[0-9]:[0-9][0-9]+(client|server)’ • egrep在指定模式方面比grep更灵活,运行速度也更快,但算法需要存储空间有时会按指数速度上升 • fgrep(快速grep) • 按字符串搜索而不是按模式搜索。 • fgrep运算速度快,对存储空间要求低,但只能指定字符串,不可按模式查找。

  18. grep选项 选项:grep/fgrep/egrep有若干选项用以控制输出格式 -n 显示时每行前面显示行号 -v 显示所有不包含模式的行 grep -v '[Dd]isable' device.stat > device.active 将文件device.stat中取消所有含有指定模式的行,生成新文件device.active 例:grep '[0-9]*' chapter1 [0-9]*与空字符串匹配,上述命令打印出chapter1文件中所有行 grep '[0-9][0-9]*' chaptev1 打印出文件chapterl中含有数字的行

  19. awk:文本处理语言 a.w.k分别为该实用程序的三位设计者姓氏的第一个字母。 用法: awk '程序' 文件名列表 awk -f 程序文件名文件名列表 程序:条件{动作} 常用:/模式/ {动作} 模式的描述,使用扩展的正则表达式(与egrep同)。 每次读取文件的一行,如果该行与模式匹配(满足指定条件)则执行相应动作,该程序可以做得非常复杂。 awk本身是一种文本处理语言的解释程序,含有条件判断,循环控制,变量,内部函数,等等。

  20. awk举例 root[45]#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 root[46]#ps -ef | grep guest | awk '{ printf "%s ",$2 }' 669 678 root[47]# cat test.c | awk '{printf "%d: %s\n",NR,$0 }' 1: main() 2: { 3: printf("Hello!\n"); 4: } $1为该行的第一列内容,$2为第2列内容,……,$0为本行整行的内容 NR为当前行号。

  21. sed: 流编辑 • stream editor • 用法:sed '命令' 文件名列表 • sed -f 命令文件文件名列表 • 例: • sed '/100\.1\.l\.4/计算中心 /g' /etc/host_tab • 将100.1.1.1替换为” 计算中心” • cat /etc/hosts | sed -f sed.cmd • 其中sed.cmd 文件 • s/100\.l\.l\.4/计算中心 /g • s/100\.1\.1\.5/明光村 /g

  22. tr: 翻译字符 用法:tr string1 string2 把stdin拷贝到stdout,对选出的字符作替换。在字符串string1中出现的输入字符被替换为字符串string2中的对应字符。 例: cat telnos | tr UVX uvx 可以使用[ ]指定一个集合。 例: cat report | tr '[a-z]' '[A-Z]' 将小写字母改为大写字母。 也可以使用\加三个八进制数字(类似C语言中描述字符串的方法)表示一个字符。 例:cat file1 | tr % '\012' 将%改为换行符(注意不要漏掉必需的单引号)。

More Related