`
su1216
  • 浏览: 671149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
深入入门正则表达式(jav...
浏览量:71932
E60283d7-4822-3dfb-9de4-f2377e30189c
android手机的安全问...
浏览量:128788
社区版块
存档分类
最新评论

《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记

阅读更多

学习笔记,内容基础,适合初学者。

 

阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记    Unix简介 & 什么是Linux?什么是Unix

《Unix & Linux 大学教程》 - 第三、四章 学习笔记    Unix连接 & 开始使用Unix

《Unix & Linux 大学教程》 - 第五、六章 学习笔记    GUI:图形用户界面 & Unix工作环境

《Unix & Linux 大学教程》 - 第七、八章 学习笔记    Unix键盘使用 & 能够立即使用的程序

《Unix & Linux 大学教程》 - 第九、十章 学习笔记    文档资料:Unix手册与Info & 命令语法

《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记    shell & 使用shell:变量和选项

《Unix & Linux 大学教程》 - 第十三章 学习笔记    使用shell:命令和定制

《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记     使用shell:初始化文件

《Unix & Linux 大学教程》 - 第十八章 学习笔记    过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记    过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记  过滤器:选取、排序、组合及变换 正则表达式

《Unix & Linux 大学教程》 - 第二十一章 学习笔记  显示文件

《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记  vi文本编辑器(一)

《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记  vi文本编辑器 (二)

《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记  vi文本编辑器 (三)

《Unix & Linux 大学教程》 - 第二十四章 学习笔记  目录操作

《Unix & Linux 大学教程》 - 第二十五章 学习笔记  文件操作

《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记  进程和作业控制

《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记  进程和作业控制

《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间


 

第十九章:过滤器:选取、排序、组合及变换

第十九章第一部分

 

基础知识

程序/命令

grep(re代表regular expression,正则表达式;g代表global,全局;p代表print,打印)

语法

grep [-cilLnrsvwxpattern [file...]

pattern是要搜索的模式(翻译的实在让人太不爽了,pattern应该就是要搜索的内容吧?!)

file是输入文件的名称

 

-c(count,统计):显示所抽取行的数量

-i(ignore,忽略):忽略大小写

-n:在输出的每一行前面写一个相对行号

-l(list filename,列举文件名):指定此选项时,grep不显示包含该模式的各行,而是将包含这种模式的文件名称列出来

-L:与-l相反,将不包含这种模式的文件名称列出来

-w:指定只希望搜索完整的单词

-v(reverse,相反):选项选取不包含指定模式的所有行。

-x:查找pattern占用整行的那些行

-r(recursive,递归):递归搜索子目录以及子目录下的所有文件

-s(suppress,抑制):搜索的时候,不显示类似于下面的log

log 写道
No such file or directory
Permission denied

fgrep:快速版本的grep,只搜索“固定字符”的字符串,不允许使用正则。

egrep:grep的扩展版本,原始的grep只允许基本的正则表达式,egrep支持功能更强大的“扩展正则表达式”。(第20章讨论他们的区别)

使用grep -E和egrep允许使用扩展正则表达式。

 

 

look

语法

look [-dfpattern file...

pattern是搜索模式

file是文件名称

作用:程序搜索以字母顺序排列的数据,并查找所有以特定模式开头的行。

look不能从标准输入中读取数据,它必须从一个或多个文件中获取输入。因为它使用二分法查找,需要同时访问所有数据。

所以只能在管道开头使用,但是不能在管道中间使用它。

 

-d:忽略标点符号和其他特殊字符

-f(fold,同等):告诉sort忽略大小写

 

look pattern

查找以pattern开头的单词(在dictionary file - 字典文件中查找)

 

 

sort

语法

sort [-dfnru] [-o outfile] [infile...]

outfile是存放输出的文件的名称

infile是包含输入的文件的名称

作用:排序数据

如果想将输出保存到输入的文件中(比如:想对names文件排序,然后再输出到names中),需要使用-o选项

sort -o names names

否则,当重定向标准输出时,shell在运行命令之前建立输出文件,所以下面的命令会导致names被清空,然后执行sort,所以最终结果就是names是个空文件。

sort names > names(错误)

 

-d(dictionary,字典):只查看字母、数字和空白符(空格和制表符)。当数据中包含可能妨碍排序过程的字符(标点符号等),可以使用这个选项

-f(fold,等同):忽略大小写

-n(numeric,数字):识别行开头或者字段开头的数字,并按数字进行排序。数字可以包含前导0、负号和小数点

-r(reverse,反向):反向排序

-u(unique,唯一):查找相同的行,并相同行只留下一行

 

语法

sort -c[u] [file]

file是文件名称

作用:检查数据是否有序

 

-c(check,检查):不排序,只检查

-cu:检查顺序和重复行

sort -c test
sort: test:6: disorder: d

比如我对test文件排序,如果test无序,则会出现类似上面的log

sort: test:表示对test排序,后面的6表示第六行的时候顺序就不对了,第六行为d

 

 

区域设置(locale)与排序

sort的结果是和locale设置有关的

如果我们要对A,a,C,c,B,b排序,那么有两种常见结果

第一种为:A,B,C,a,b,c

第二种为:a,A,b,B,c,C

第一种以ASCII表的顺序排列(关于ASCII表请见文章末尾),需要记住的顺序:制表符、空格、数字、大写字母、小写字母。称为C区域或者POSIX区域

第二种则以locale为美国英语(en_US)排序(除了排序不同,其余都相同)

 

en_US和C的排列结果区别很大,自行查表吧

 

注:比如,如果使用rm [A-Z]*,那么结果是和排序有关的。如果locale=C,那么结果就是删除了大写字母开头的文件;如果locale=en_US,那么就是删除了除了以小写a开头的所有以英文字母开头的文件。

 

locale -a:查看系统支持的区域

 

环境变量

LC_COLLATE:指定排序方式

export LC_COLLATE=C

 

 

uniq

语法

uniq [-cdu] [infile [outfile]]

uniq的输入必须是有序的(如果是无序的,也不会提示错误)

 

infile是输入的文件的名称

outfile是输出的文件的名称

作用:消除重复行;选取重复行;选取唯一行;统计重复行数量。

 

-c:统计重复行

-d:只查看重复行

-u:只查看唯一行

 

uniq data:重复行只留一行

uniq data newdata:将结果输出到newdata中

uniq -du data:无输出

(上面的data一定要有序)

 

取两个文件行的交集

sort file1 file2 | uniq -d

 

join

语法

join [-i] [-a1|-v1] [-a2|-v2] [-1 field1] [-2 field2file1 file2

field1和field2是引用特定字段的数字

file1和file2是包含有序数据的文件的名称

join像是数据库中的联合查询(当然,也不是那么智能,两个文件内容都需要有序)

假设我们有这样两个文件name和age,其中name文件中有每个人的id和name,age文件中有每个人的id和age。

name age
1 a
2 b
3 c
5 e
4 d
1 34
2 43
3 12
5 23
4 26

默认情况下,join假定各个字段之间用空白符分隔,假定联接字段是每个文件的第一个字段

join name age
1 a 14
2 b 18
3 c 54
5 e 26
4 d 45

结果看上去还不错

但是数据源肯定不会总是这么完美,如果name中,只有id=1,3,5,而age中,只有id=1,2,3,4,那情况会是如何呢

join name age
1 a 14
3 c 54

join会找出他们公共部分(类似于inner join)

 

有了inner join大家肯定也会想,left join、right join、full join

总结下对应关系

left join:join -a1 name age

right join:join -a2 name age

full join:join -a1 -a2 name age

inner join:join name age

这里-a中的a表示all

 

-v(reverse,相反):-v1,只输出第一个文件中的不匹配行

-i:忽略大小写

-1 +字段编号:指定第一个文件的联接字段

-2 +字段编号:指定第二个文件的联接字段

join -1 2 -2 3 file1 file2(以file1的第二个字段和file2的第3个字段做连接)

(注意:join的结果与环境变量LC_COLLATE值有关)

 

 

tsort

语法

tsort [file]

作用:由偏序建立全序(只要偏序中没有圈)

简化一下书中的例子给予说明

今天周末,宅男A快要下班了,正计划晚上的安排,于是它列举了一些回家要做的事情,并且有一定的顺序

烧水要在泡面之前

扫地要在擦地之前

看片要在睡觉之前

泡面要在吃饭之前

吃饭要在看片之前

擦地要在吃饭之前

睡觉要在做梦之前

吃饭要在睡觉之前

哥们写好了,保存到一个叫todo的文件中格式为:

烧水 泡面

扫地 擦地

看片 睡觉

泡面 吃饭

吃饭 看片

擦地 吃饭

睡觉 做梦

吃饭 睡觉

 

 

有个妞问宅男A:“你今晚什么安排阿?”,哥们想了想,觉得不能把文件给姑娘让人家自己分析啊,于是哥们决定使用tsort!

tsort todo 
扫地
烧水
擦地
泡面
吃饭
看片
睡觉
做梦

然后…………………………

tsort就是干这个用的,帮你缕清关系,然后排序。

 

 

strings

语法

strings [-length] [file...]

 

length是要显示的字符串的最小长度

file是文件名称,通常是一个路径名

默认情况下,strings只抽取至少有4个字符串长的字符串

 

作用:显示可执行文件中的字符串

 

 

 

名词解释

联接:当基于匹配的字段组合两组数据时,我们称之为联接(名称来自数据库理论)

联接字段(join field):用来匹配的具体字段称为联接字段

DAG(directed acyclic graph):有向无环图(不明白含义的同学请参看图论书籍)

 

ASCII(中文维基百科)

ASCII(英文维基百科)

 

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

 

2
3
分享到:
评论

相关推荐

    Linux学习笔记.pdf,linux详解,LINUX

    Linux,全称GNU/Linux,是一种基于 Unix 的自由及开放源代码的操作系统,其内核由林纳斯·托瓦兹在1991年首次发布。Linux操作系统被广泛应用于服务器、超级计算机、移动设备(如Android手机)以及家用电脑等各种硬件...

    linux学习笔记 .doc

    Linux学习笔记概述 Linux是一种自由和开放源代码的操作系统,其设计目标是提供一个轻量级、高效且安全的计算平台。Linux系统采用类UNIX目录结构,每个目录都有特定的功能和用途。以下是对Linux主要目录及其内容的...

    linux系统学习笔记

    ### Linux系统学习笔记 #### 一、Linux系统Shell介绍 1. **Linux系统Shell类型**:Linux系统提供了多种Shell供用户选择,常见的包括Bourne shell (`sh`), C shell (`csh`), Korn shell (`ksh`)等。其中,`sh`是Unix...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 登陆服务器时输入 公帐号 openlab-open123 telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss 老师测评网址 http://172.16.0.198:8080/poll/ 各个 ...

    linux与unix经典编程

    - 第一部分的第二个至第十个字符分为三个三元组(triplet),分别表示文件属主、组用户和其他用户的权限。 - 第二部分表示文件的硬链接数目。 - 第三部分表示文件属主。 - 第四部分表示文件属主所在的默认组。 - 第...

    APUE读书笔记(Unix高级环境编程)

    - **Unix手册页**:介绍如何使用`man`命令查询Unix/Linux系统中的命令、函数等的文档,是学习Unix编程的重要资料来源。 - **系统调用与库函数**:系统调用是应用程序与操作系统内核之间的接口,库函数则是对系统调用...

    第11章 Linux操作系统基础-教程与笔记习题

    以下是对"第11章 Linux操作系统基础"的主要知识点的详细阐述。 一、Linux操作系统简介 Linux是基于Unix的操作系统,由林纳斯·托瓦兹于1991年创建。它的内核是开源的,允许全球开发者对其进行修改和优化。Linux系统...

    嵌入式Linux入门笔记

    通过“嵌入式Linux入门笔记”,学习者将能了解嵌入式系统的基础概念,熟悉Linux内核、设备驱动、Bootloader的工作原理,掌握构建和调试嵌入式系统的技能,为成为一名合格的嵌入式Linux开发者打下坚实基础。

    循序渐进Linux.

    #### 第一章:服务器硬件的那些事儿 ##### 计算机的组成及分类 - **组成部分**:计算机由CPU、内存、硬盘、主板、网卡和输入输出设备等核心部件组成。 - **决定因素**:计算机性能好坏通常由CPU、内存和硬盘的规格...

    总结搜集的shell脚本学习笔记(完结篇).pdf

    ### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell...以上就是文档《总结搜集的shell脚本学习笔记(完结篇)》中所涵盖的主要知识点,希望对你有所帮助。

    Linux笔记[整理].pdf

    Linux操作系统是开源的类Unix系统,广泛应用于服务器、嵌入式设备和桌面环境中。了解Linux的基础知识,特别是其目录结构和命令行操作,对于软件开发人员来说至关重要。 首先,让我们来详细了解一下Linux的目录结构...

    Linux 101考试模块化培训笔记(Andrew McGill)Linux 101 Examination Modular Training Notes (Andrew McGill)

    Linux 101考试模块化培训笔记是为Linux专业人士协会(LPI)的LPI 101考试准备的,尤其针对考试的第2版目标。这本培训笔记由Andrew McGill编写,属于Leading Edge Business Solutions公司的Linux培训计划的一部分。该...

    sed 与 awk(第二版)

    《sed 与 awk(第二版)》学习笔记 在IT领域,sed和awk是两种强大的文本处理工具,尤其在Linux和Unix系统中被广泛使用。它们对于数据处理、日志分析、文本转换等方面有着不可忽视的作用。这份笔记旨在帮助读者理解...

    C-plus-plus-Series:学习C ++的旅程

    C ++入门手册第五版笔记与知识点整合 一.C ++基础知识 二。函数 三。类 四.IO库 ##五。顺序容器 六。泛型编程 七。关联容器 八。动态内存 九。拷贝控制 十。重载运算与类型转换 十一。面向对象程序设计 十二。模板...

    大一大二mysql笔记

    它支持多种操作系统,如Windows、Linux、Unix等,并具有高性能、高可靠性、易于使用的特点。 二、数据库与数据表 1. 数据库(Database):存储数据的容器,如student_db。 2. 表(Table):数据库中的数据结构,如...

Global site tag (gtag.js) - Google Analytics