《过滤器4.ppt》由会员分享,可在线阅读,更多相关《过滤器4.ppt(38页珍藏版)》请在三一文库上搜索。
1、过滤器,薛卫,2,过滤器,文本过滤 就是获取文本输入流,在文本上执行某些转换或什么都不做,然后将它发送到输出流的过程,3,Cat-获取输入并输出,语法:cat -bns file 简单输入输出:cat (ctrl+D) 重定向创建文件:cat data cat data 复制文件:cat newdata 显示文件: cat file4,4,Split划分文件,split OPTION INPUT PREFIX 将一个档案分割成数个。从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab.;PREFIX 默认值为 x。若没有 INPUT 档或为 -,则从标准
2、输入读进资料。 -d 使用数字而不是字母作为后缀名 -a X 指定后缀名的长度,默认为2位 -l num 分割后文件行数,5,C程序生成6w行数据文件,6,tac,Tac是cat的倒写,意思也和它是相反的。cat是从第一行显示到最后一行,而tac是从最后一行显示到第一行 用法与cat类似,7,rev,rev 是把每行的字符反转 rootlocalhost $ cat file jj d s kk lop rootlocalhost $ rev file s d jj kk pol,8,head,命令 :head -n lines 默认 选项 不指定任何选项的时候,比如执行head file,则
3、显示file文件的全部内容。 -n 选项 显示指定文件的前n行,n为一个整数。,9,tail,命令:tail -n lines 默认 选项 不指定任何选项的时候,比如执行tail file,则显示file文件的全部内容。 -n 选项 显示指定文件的后n行,n为一个整数。,10,删除数据列:colrm,语 法:colrm 开始列数编号 colrm指令从标准输入设备读取,转而输出到标准输出设备。如果不加任何参数,则该指令不会过滤任何一行。,11,书后习题,12,文件比较和抽取,13,比较文件-cmp,语法:cmp file1 file2 特点:逐字节比较,可以比较图片、音乐等文档,14,Comm-
4、比较有序文本文件,语法:comm -123 file1 file2 逐行地比较两个排好序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3列显示:第1列仅是在第1个文件中出现过的行,第2列是仅在第2个文件中出现过的行,第3列则是在第1与第2个文件里都出现过的行。 选项1、2或3抑制相应的列显示。例如 comm - 12就只显示在两个文件中都存在的行; comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行; comm - 123则什么也不显示。,15,rootlocalhost unix# cat frick alison barbara ben chunk
5、noah rootlocalhost unix# cat frack alison barbara candy chuck noah sue rootlocalhost unix# comm frick frack alison barbara ben candy chuck chunk noah sue,16,只能比较排序的文件-否则无意义,rootlocalhost unix# cat frick1 barbara ben chunk noah alison rootlocalhost unix# comm frick1 frack alison barbara ben candy chu
6、ck chunk noah alison sue,17,只能比较排序的文件-否则无意义,rootlocalhost unix# cat a1 a b d c rootlocalhost unix# cat b1 a b c d,rootlocalhost unix# comm a1 b1 a b c d c rootlocalhost unix# comm b1 a1 a b c d c,18,diff,显示将第一个文件修改为第二个文件所需要遵循的指示,19,rootlocalhost unix# cat b g a c rootlocalhost unix# cat a a g c root
7、localhost unix# diff a b 1d0 a rootlocalhost unix# diff b a 1d0 g,号是指第1个文件更改或删除的行,号是第2个文件中增加或删除的行,20,Diff选项,-i忽略大小写区别 -w忽略空白符 -b忽略空白符数量区别,21,-c改变输出格式-上下文输出格式,rootlocalhost unix# diff -c a b * a 2010-12-17 11:20:00.000000000 +0800 - b 2010-12-16 16:24:51.000000000 +0800 * * 1,4 * - d g ! b c - 1,3 -
8、g ! a c,rootlocalhost unix# cat a d g a rootlocalhost unix# diff -c a b * a 2010-12-17 11:20:49.000000000 +0800 - b 2010-12-16 16:24:51.000000000 +0800 * * 1,3 * - d g a - 1,3 - g a + c,指第1个文件一共有4行,指第2个文件一共有3行, 比较的文件的后者比前着多一行 比较的文件的后者比前着少一行 ! 比较的文件两者有差别的行,22,-u改变输出格式-统一输出格式,rootlocalhost unix# diff
9、-u a b - a 2010-12-17 11:20:49.000000000 +0800 + b 2010-12-16 16:24:51.000000000 +0800 -1,3 +1,3 -d g a +c -1,3是指第1个文件一共有3行,+1,3 是指第2个文件一共有3行,统一格式的输出更加紧凑,所以更易于理解,更易于修改,23,-y改变输出格式-并排格式输出,rootlocalhost unix# diff -y a b d c rootlocalhost unix# diff -y a b g g a a d | c,这种并排格式的对比一目了然,可以快速找到不同的地方,24,sd
10、iff,rootlocalhost unix# sdiff a b g g a a d | c rootlocalhost unix# sdiff -l a b g ( a ( d | c rootlocalhost unix# sdiff -s a b d | c,25,假如你想查看两个文件是否不同又不想显示差异之处的话,可以加上q选项: rootlocalhost diff# diff hello.c hello_diff.c -q Files hello.c and hello_diff.c differ,26,注意点换行符,rootlocalhost unix# cat h a b r
11、ootlocalhost unix# cat h1 a brootlocalhost unix# diff h h1 2c2 b No newline at end of file rootlocalhost unix# cat h1 a b rootlocalhost unix# diff h h1,Windows文件系统中的换行符是 rn Apple的文件系统中的换行符是 r Unix的文件系统中的换行符是 n dos2unixmac2unixunix2dos,27,Cut-抽取指定数据列,语法:cut c list file List是要抽取的列的列表 Who | cut c 1-8 语
12、法:cut f list -d deli -s file List是要抽取的字段的列表 S抑制没有定界符deli的行输出,28,Paste-组合数据列,语法: paste -d char file -d 指定不同于空格或tab键的域分隔符。 paste -d: pas2 pas1 P.Jones:ID897 S.Round:ID666 L.Clip:ID982,29,nl创建行号,语法:nl -v start -I increment -b a -n ln|rn|rz file Start是起始号,-i是增量,-b a强制对空行编号,-n数字格式选项,ln左对齐(无前导0) ,rn右对齐(无前
13、导0) ,rz右对齐(有前导0),30,Wc-统计行、单词、字符数量,语法:wc -clLw file C统计字符,l统计行,w统计单词,L输入中最大行长度 统计单个文件:Wc file 统计多个文件:wc file1 file2 例:统计文件数量 ls /etc | wc -l,包括换行符,无换行符,不计行数,P381例,31,patch,patch options originalfile patchfile 如果patchfile为空则从标准输入读取patchfile内容;如果originalfile也为空,则从patchfile(肯定来自标准输入)中读取需要打补丁的文件名。因此,如果需
14、要修改的是目录,一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下,patch都用以下这种简单的方式使用: patch -pnum patchfile patch -R patchfile-去除补丁,32,-p0 选项要从当前目录查找目的文件(夹) -p1 选项要忽略掉第一层目录,从当前目录开始查找。 * 在这里以实例说明: - old/modules/pcitable Mon Sep 27 11:03:56 1999 + new/modules/pcitable Tue Dec 19 20:05:41 2000 如果使用参数-p0,那就表示从当前目录找一个叫做old的文件
15、夹,在它下面寻找modules下的pcitable文件来执行patch操作。 如果使用参数-p1,那就表示忽略第一层目录(即不管old),从当前目录寻找modules的文件夹,在它下面找pcitable。这样的前提是当前目 录必须为modules所在的目录。而diff补丁文件则可以在任意位置,只要指明了diff补丁文件的路径就可以了。当然,可以用相对路径,也可以用绝 对路径。不过我一般习惯用相对路径。,33,差分与补丁实例,第一步 两个文件的对比 文件1:/tmp/file1.txt 文件2:/tmp/file2.txt 用法:diff -ruN /tmp/file1.txt /tmp/fil
16、e2.txt /tmp/file.diff -r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。 -N表示如果某个文件仅在一个目录中出现,则假定其在另一个目录中为空文件。确保补丁文件将正确地处理已经创建或删除文件的情况。,34,第二步 cd /tmp; patch -p1 /tmp/path.diff,35,36,*,diff -Nur linux-2.4.15/Makefile linux/Makefile patch-2.4.16 - linux-2.4.15/Makefile Thu Nov 22 17:22:58
17、2001 + linux/Makefile Sat Nov 24 16:21:53 2001 -1,7 +1,7 VERSION = 2 PATCHLEVEL = 4 -SUBLEVEL = 15 -EXTRAVERSION =-greased-turkey,37,*,patch首先尝试当前目录(或者-d参数指定的目录)下的linux-2.4.15/Makefile文件是否存在,如果不存在则试图对linux/Makefile文件操作,仅当两者都不存在时(或者设置了POSIXLY_CORRECT环境变量)才会读取Index:的内容(此文件中没有标识)。 前面提到的-p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个“/”以前的目录,依此类推。如/usr/src/linux-2.4.15/Makefile这样的文件名,在提供-p3参数时将使用当前目录下linux-2.4.15/Makefile作为所要patch的文件。,38,17章课后应用题,
链接地址:https://www.31doc.com/p-3108578.html