首页计算机计算机软件Unix&Linux教程 19 第19章 过滤器:选取、排序、组合及变换.pptx

19 第19章 过滤器:选取、排序、组合及变换.pptx

页数:53页文件大小:126.5 KB来源: Unix&Linux教程ppt课件

本课件讲解数据选取、排序、组合与变换:grep与look的模式选取、sort的排序控制与排序序列、uniq、join与tsort的组合处理,以及tr字符转换与sed非交互式文本编辑的用法。

第19章过滤器:选取、排序、组合及变换封面,标示本章讲解的grep、sort、uniq、join、tr与sed
本章需要解决的几个问题要点讲解,涵盖grep有什么作用、sort程序可以执行的两项任、什么是排序序列等
19.1选取包含特定模式的行:grep说明页,语法定义:grep[-cilLnrsvwx]pattern[file…]其中:pattern:要搜索的模式
查看本课件的文字版(共 53 页,供检索与复制)

第1页:第19章过滤器:选取、排序、组合及变换

本页为第19章过滤器:选取、排序、组合及变换的章节封面,标示本章讲解的grep、sort、uniq、join、tr与sed。

第2页:本章需要解决的几个问题

  • grep有什么作用?为什么它在管道线中特别有用?
  • sort程序可以执行的两项任务是什么?
  • 什么是排序序列?什么是区域设置?是什么将它们连接在一起的?
  • uniq程序可以执行哪4项任务?
  • tr程序可以执行哪3项任务?

第3页:19.1选取包含特定模式的行:grep

语法定义
grep[-cilLnrsvwx]pattern[file…]其中:pattern:要搜索的模式

第4页:19.1选取包含特定模式的行:grep

  • 例子:$ grep harley /etc/passwd$ grep ‘:’ info$ w-h | grep pm | cut-c 1-8

第5页:19.2最重要的grep选项

-c
选择所选择行的数量
-i
模式匹配时忽略大小写的区别
-n
在输出的每一行前写一个相对行号
-l
从多个文件中搜索指定模式时,不输出包含该模式的行,而输出包含该模式的文件名
-L
从多个文件中搜索指定模式时,输出不包含该模式的文件名

第6页:19.2最重要的grep选项:-w

-w
全字匹配
-v
选择不包含指定模式的所有行
-x
查找完全由搜索模式构成的行
-r
搜索整个目录树
-s
抑制使用-s时的错误信息输出

第7页:grep的变体:fgrep、egrep

简化版grep
fgrep-只能搜索固定字符串,不能使用正则表达式
加强版grep
egrep-支持扩展正则表达式

第8页:19.4选取特定模式开头的行:look

语法定义
look[-df]patternfile…其中:pattern:要搜索的模式

第9页:19.5使用look和grep的时机

  • look的3个
  • look的2个
  • 缺点:-1.要求有输入;-2.只能从文件中读取数据,不能从标准输入中读取数据;-3.只能在行的开头搜索指定的模式。
  • 优点:-1.易于使用;-2.搜索速度快。

第10页:使用look和grep的时机

  • grep的2个
  • look的2个
  • 缺点:-1.使用复杂;-2.速度比look慢。
  • 优点:-1. grep是过滤器;-2.搜索灵活,功能强大。

第11页:19.6查找特定模式开头的单词:look

语法定义
lookpattern其中:pattern:要搜索的模式说明:查找的目标是字典文件

第12页:19.7排序数据:sort

  • 语法定义:sort[-dfnru][-ooutfile][infile…]其中:outfile:输出文件的名称infile:输入文件名称说明:可以按行排序,也可以按字段排序

第13页:19.7排序数据:sort

  • 例子:$ sort-o names names$ sort name1 name2 > name特别注意-o和重定向的用法。

第14页:控制数据排序的顺序:sort-dfn

  • 控制sort工作方式的选项:-d:只查看字母、数字和空白符-f:忽略大小写-n:识别行开头或字段开头的数字,并按数字进行排序-r:反向排序-u:相同的行只留一个

第15页:19.9检查数据是否有序:sort-c

  • 语法定义:sort-c[u][file]其中:-c:不排序,只检查数据是否有序-cu:不仅检查数据是否有序,同时也检查数据行是否唯一。

第16页:19.10 ASCII码;排序序列

  • ASCII码:美国信息交换标准码-使用7位来记录一个字符,从0000000到1111111,共128个字符。-包括33个控制字符、95个可显示字符(52个字母、10个数字、32个标点符号、空格)-使用man ascii查看

第17页:ASCII码;排序序列:排序序列-

  • 排序序列-在字符编码方案中,字符组织的顺序称为排序序列。-sort按排序序列进行排序

第18页:ASCII码;排序序列

  • ASCII码的排序序列-重点记住3个基本准则1.空格在数字之前;2.数字在大写字母之前;3.大写字母在小写字母之前。

第19页:19.11区域设置和排序序列

  • 区域设置-区域设置是一种技术规范,描述与特定文化的用户通信时应该使用的语言和习俗。-环境变量LC_COLLATE中保存了区域设置的值。-可以使用locate-a查看系统支持的区域设置。

第20页:区域设置和排序序列:美国的两种区域设置-

美国的两种区域设置-C/POSIX
基于ASCII-en_US:基于字典序

第21页:19.12查找重复行:uniq

  • 选取重复行
  • 选取唯一行
  • 统计重复行的数量
  • uniq的4项不同任务:-消除重复行

第22页:查找重复行:uniq:uniq的语法定义

  • uniq的语法定义:uniq[-cdu] [infile[outfile]]其中:infile:输入文件名称outfile:输出文件名称-c:统计重复行的数量-d:选取重复行-u:选取唯一行注意:infile必须是有序的

第23页:19.12查找重复行:uniq

  • 例子,有文件data,内容如下:A1A1BarbaraBarbaraCharles

第24页:19.12查找重复行:uniq示例

19.12查找重复行:uniq命令示例:

$uniq dataA1BarbaraCharles$ uniq-d dataA1Barbara$ uniq-u dataCharles$ uniq-c data2 A12 Barbara1 Charles

第25页:合并两个文件中的有序数据:join

  • 语法定义:join[-i] [-a1|-v1] [-a2|-v2] [-1field1] [-2field2]file1 file2其中:field1、field2:引用特定字段的数字file1、file2:包含有序数据的文件

第26页:合并两个文件中的有序数据:join

  • 例子,有文件birthdays和gifts,内容如下:A 1987-5-10B 1992-2-2D 1990-4-8F 1991-10-15G 1992-1-17A moneyB chocolateC musicD booksE camera

第27页:合并两个文件中的有序数据:join示例

19.13合并两个文件中的有序数据:join命令示例:

$join birthdays giftsA 1987-5-10 moneyB 1992-2-2 chocolateD 1990-4-8 books$join-a1 birthdays giftsA 1987-5-10 moneyB 1992-2-2 chocolateD 1990-4-8 booksF 1991-10-15G 1992-1-17

第28页:合并两个文件中的有序数据:join示例

19.13合并两个文件中的有序数据:join命令示例:

$join-a1-a2 birthdays giftsA 1987-5-10 moneyB 1992-2-2 chocolateC musicD 1990-4-8 booksE CameraF 1991-10-15G 1992-1-17$ join-v1 birthdays giftsF 1991-10-15G 1992-1-17

第29页:19.14由偏序创建全序:tsort

  • 偏序每个关于顺序的约束称为一个偏序(partialordering)
  • 全序排序对象整体上是有序的

第30页:由偏序创建全序:tsort:语法定义

语法定义
tsort[file]其中:file是输入文件的名称。file的每一行必须包含一对由空白符分隔的字符串。

第31页:19.14由偏序创建全序:tsort

  • 例子:文件activities内容如下clean-disheswatch-TVeatclean-dishesshopcookshopput-away-foodput-away-foodcookcook eatput-away-foodwatch-TV

第32页:19.14由偏序创建全序:tsort示例

19.14由偏序创建全序:tsort命令示例:

$tsort activitiesshopput-away-foodcookeatclean-disheswatch-TV

第33页:19.15在二进制文件中抽取字符串

  • 字符串任何一个可显示字符序列都称为一个字符串
  • 文本文件只包含可显示字符串和新行字符的文件称为文本文件或ASCII文件
  • 二进制文件任何非文本文件的非空文件,都是二进制文件

第34页:在二进制文件中抽取字符串:语法定义

语法定义
strings[-length] [file…]其中:length:要显示的字符串的最小长度默认长度是4

第35页:19.15在二进制文件中抽取字符串

  • 例子:$ strings /usr/bin/sort$ strings-7 /usr/bin/sort | sort-u$ strings-7 date | sort-u | less

第36页:19.16转换字符:tr

  • tr的三个功能:1.可以将字符转换成其它字符,如小写字母转换成大写字母。这样做时,称为转换字符。2.可以将连续出现的字符,用一个单独的字符来替换。这样做时,称为挤压字符。3.可以删除指定字符。

第37页:19.16转换字符:tr:语法定义

  • 语法定义:tr[-cds] [set1[set2…]]其中:set1、set2:字符组注意:没有输入文件参数,是纯过滤器。

第38页:19.16转换字符:tr

  • 例子:$traA< old$trabcABC < old$trabcdeAx < old$trabcdeAxxxx< old$tr‘:;?’\. < old

第39页:19.16转换字符:tr

  • 例子:$tra-zA-Z< old$tr0-9 A-J < old$tr[:lower:] [:upper:] < old$tr[:digit:] A-J < old

第40页:19.17转换不可显示字符

  • 有哪些可转换的不可显示字符名称八进制代码控制键代码Backspace\010^H\bTab\011^I\t新行\012^J\nReturn\015^M\r反斜线\\

第41页:19.17转换不可显示字符

  • 例子:$tr‘\r’ ‘\n’ < old$tr‘\015’ ‘\012’ < old$tr‘\t’ ‘ ’ < old$tr‘\011’ ‘ ’ < old

第42页:19.18转换字符:高级话题

  • tr命令的3个选项:-s:多个连续字符替换为一个单独的字符。例子:$tr-s [:digit:] X <olddata$tr-s ‘ ’ ‘ ’ <olddata

第43页:转换字符:高级话题:tr命令的3个选项

  • tr命令的3个选项:-d:删除指定的字符。例子:$tr-d ‘()’<olddata$tr-d [:digit:] <olddata

第44页:转换字符:高级话题:tr命令的3个选项

tr命令的3个选项
-c:匹配所有不在第一个字符组中的字符。例子:$tr-c ‘\n’ X <olddata

第45页:19.19非交互式文本编辑:sed

  • 语法定义:sed[-i]command|-ecommand…[file…]其中:command:sed命令-i:将输出写入到临时文件,处理完成后,用临时文件覆盖输入文件。

第46页:非交互式文本编辑:sed

sed命令执行流程
(1)从输入流中读取一行。(2)执行指定的命令,对该命令进行必要的转换。(3)将该行写入到输出流中。

第47页:19.20使用sed进行替换

  • s命令:[/address| pattern/]s/search/replacement/[g]其中:address:输入流中一个或多个行的地址pattern:字符串search:正则表达式replacement:替换文本g:改变所有的匹配字符串,默认只改变每行的第一个匹配字符串

第48页:19.20使用sed进行替换

  • 例子:$sed‘s/harley/Harley/g’ names$sed-i ‘s/[mM]on/Monday/g’ calendar$sed-i ‘s/.$//’winfile

第49页:19.21告诉sed只对指定行进行操作

地址描述
number[,number]|/regex/其中:number:行号regex:正则表达式

第50页:19.21告诉sed只对指定行进行操作

  • 例子:$sed‘5s/harley/Harley’ names$sed‘5,10s/harley/Harley’ names$sed‘$s/harley/Harley’ names$sed‘5, $s/harley/Harley’ names

第51页:19.21告诉sed只对指定行进行操作

  • 例子:$sed‘/ok/s/harley/Harley’ names$sed‘/[0-9] [0-9]/s/harley/Harley’ names

第52页:19.22使用非常长的sed命令

  • 方法1:使用-e选项例如:$sed-i\-e ‘s/mon/Monday/g’\-e ‘s/tue/Tuesday/g’\-e ‘s/wed/Wednesday/g’\-e ‘s/thu/Thursday/g’\calendar

第53页:19.22使用非常长的sed命令:方法2

  • 方法2:将命令写到文件中例如:命令存储在文件instructions中,对文件input中数据进行操作:$sed-f instructions input
顶部目录