文本查找与文件查找

咬文嚼字,颠倒糊涂,善哉!善哉?

念头通达,思虑有感,言简明,意通神

文件是什么?文本是什么?文本文件是什么? 

    好想来碗正常的豆腐脑,可惜每天早上也只能是豆腐花。吃不到,想想还是可以的,豆腐脑是“文件”,吃豆腐脑是“看文本”,找到地,点了豆腐脑,就是“查找文件”,符合个人口味的,加盐,加咸菜,加黄豆,加香菜,加卤汁,就是不同的豆腐脑了,有的人喜欢多加盐,有的人不要咸菜,还有的人喜欢黄豆,不同的人想要的豆腐脑都是不一样的呢?如何定制出符合自己的口味呢?定制出不同口味的过程,就是查找符合自己口味的豆腐“文件”的过程,多一勺卤汁的豆腐脑,叫它一汁豆腐脑( ^_^ ),不同的人,造就了不同口味的豆腐脑,接而产生了不同豆腐脑名字,虽然大的方面它还是叫豆腐脑,它还是叫文件,怎么找到符合自己口味的豆腐脑,就是怎么找到想要的文件,原理一模一样,只不过欠在表现手法上。计算机来源于生活。 

文本查找与文件查找  文本查找与文件查找

    不喜欢豆腐脑的直接看这里吧 

文件的查找 

限于目前水平可能有多漏简出,随着不断的学习,会不断的完善,此处只有通配符查找文件名,正则表达式查找文件名和文本

    先说文件名的查找:

    1、通过通配符查找

    先创建一个文件,符合下边查找例子的文件

#touch happy.D.E.person

(可以读出来的话,我想说我是故意的)

        通过ls列出当前目录下的任意字符串.任意一个字符.只有任意大小写字母的一个.任意字符串,有则列出,无则你懂得文本查找与文件查找

#ls *.?.E.*

//注意此处是没有双引号,单引号,反向单引号的,通配符查找是不需要也不能要他么的

    2、通过正则表达式查找:正则表达式的话目前就只知道用grep了查找文件名

#ls |grep ".*\..\.[[:alpha:]]\..*$"

ls 列出当前目录下的文件或文件夹,利用管道将ls列出的数据传入,grep查找符合后边正则表达式#regular expression 的文件或文件名。

任意的字符串.任意的一个字符.任意的大小写字母只有一个.任意的字符串

".*\..\.[[:alpha:]]\..*$"

双引号用来括起正则表达式

    .*表示任意的字符串#注意与通配符*的区别

    \.表示将.号转义#转成符号.人类认知的.号,而不是操作系统在正则表达式下认识的.号,因为正则表达式中的.号代表任意的一个字符

    .代表任意的一个字符,注意和通配符?区别

    [:alpha:]表示此处是任何的大小写字母皆可,但是请注意只能有一个,要想有多个比如happy.D.Ee.person就需要将[[:alpha:]]改为[[:alpha:]]\{,2\},本应该是[[:alpha:]]{,2},但是和上边的.一样,在正则表达式中{}不再是人类所认知的{}了,需要进行转义,转义用反斜杠,{,2}大括号用来表示前边的一个大写或小写字母至少出现两次{2,5}前边的一个大写或小写字母至少出现两次,最多出现5次{2,}前边的一个大写或小写字母至少出现两次,{2}前边的一个大写或小写字母必须出现两次即Ee

察觉到不一样了么?

文本的查找 

    文本,什么是文本,文件的本体,文件的内容。通常文件内容有很多,自己找起来很麻烦,太浪费时间,对文本查找方法应运而生,正则表达式,英文regular expression 规则表达式,内容遵循这种规则的表达式,用户定出这种规则,计算机按这种规则进行查找符合这种规则的东西。 linux中用grep等类似的具有查看文本功能的命令来让计算机找出用户自己想要的数据,既然是规则那么满足规则的内容都会被找出,如果没有不用说,注意按规则查找可能没有东西,可能只有一个,也可能有多个,正则表达式是所匹配到的是一个集合,而不会是一个符合规则的数据。

    文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。

    语法格式:
    grep [option]… ‘PATTERN’ FILE…

    option选项,一条命令有多个选项,命令本身是为了做什么的,选项就是怎么做,做那一部分的问题,命令有点类似豆腐脑,而选项和调料差不多,有的人要盐多,有的要多加黄豆,有的人不要卤汁,这些盐,黄豆,卤汁就有点类似选项,不同的选项执行结果是不同的,但是总体上还是在完成查找的功能,还是再喝豆腐脑,接下来就是纯理论了,按思维的方式列出来,看的时候一定要全局观,即grep按照grep+选项(可写可不写)+正则表达式+文件名的方式工作,

    再次理解一下正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;
    元字符:不表示其字面意义,而用于额外功能性描述

    正则表达式:正则表达式引擎

    基本正则表达式:grep
    扩展正则表达式: egrep, grep -E
    fgrep: fast, 不支持使用正则表达式

基本正则表达式的元字符:

字符匹配:

.: 匹配任意单个字符

[]: 匹配指定范围内的任意单个字符

[0-9], [[:digit:]]

[a-z], [[:lower:]]

[A-Z], [[:upper:]]

[[:space:]]

[[:punct:]]

[[:alpha:]]

[[:alnum:]]

[^]:

    次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

*: 任意长度,它前面的字符可以出现任意次

例如:x*y

xxy, xyy, y, 

\?: 0次或1次,它前面的字符是可有可无的

例如:x\?y

xy, y, ay

\{m\}: m次,它前的字符要出现m次

例如:x\{2\}y

xy, xxy, y, xxxxy, xyy

\{m,n\}: 至少m次,至多n次

例如:x\{2,5\}y

xy, y, xxy

\{m,\}:至少m次

\{0,n\}: 至多n次

.*:任意长度的任意字符

工作于贪婪模式:尽可能多的去匹配

    位置锚定:

^: 行首锚定;

写在模式最左侧

$: 行尾锚定:

写在模式最右侧

^$: 空白行

不包含特殊字符的连续字符组成的串叫单词:

\<: 词首,出现于单词左侧,\b

\<char

\>: 词尾,出现于单词右侧, \b

char\>

    分组:
    \(\)
    例如:\(ab\)*
    分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

    引用:
    例如\(ab\(x\)y\).*\(mn\)
    有编号:自左而后的左括号,以及与其匹配右括号
    \(a\(b\(c\)\)mn\(x\)\).*\1

    \#: 引用第n个括号所匹配到的内容,而非模式本身
    例如:
    \(ab\?c\).*\1

    bcmnaaa
    abcmnabc
    abcmnac
    acxyac
    
    命令选项:

-v: 反向选取

-o: 仅显示匹配的字串,而非字串所在的行

-i: ignore-case,忽略字符大小写

-E: 支持使用扩展正则表达式

    God bless everything!文本查找与文件查找

原创文章,作者:HGG,如若转载,请注明出处:http://www.178linux.com/77464

(0)
HGGHGG
上一篇 2017-06-04
下一篇 2017-06-04

相关推荐

  • Linux用户、组、权限管理

    Linux用户与组管理 Linux系统上,用户通过内核拷贝程序到内存中,从此发起进程。进程以发起者的身份进行,进程对文件的访问权限,取决于发起进程的用户的权限。而有些后台进程或服务类进程以非管理员身份运行,为此也需要创建多个普通用户,此类用户不需登录。 系统中,用户类别分为管理员和普通用户(系统用户和登录用户),组类别分为基本组和附加组。管理系统上的用户与组…

    Linux干货 2016-12-07
  • 如何在微软Azure云机上添加新磁盘

    大家好: 最近在项目实践中,分享下如何在微软Azure云机上添加新磁盘。 首先需要查看下是否有未用上的磁盘,先fdisk -l查(看下图)并和Azure技术确认该磁盘是否可永久保存数据: 然后找到未分区的磁盘号,如上图中的/dev/sdc,再 fdisk /dev/sdc后开始在该新磁盘上进行分区创建: 为方便管理,我们一般就创建一个分区,然后进行格式化: …

    Linux干货 2016-11-27
  • parted使用说明

    一.为什么使用parted命令     传统的MBR(Master Boot Record)分区方式,有一个局限:无法支持超过2TB的硬盘分区(单个分区超过2TB)。     GPT(GUID Partition Table)的分区表很好的解决了这个问题,但在Linux系统中,传…

    Linux干货 2015-04-13
  • CentOS多网卡单个ip和单个网卡多个ip的设置

    一、单个网卡设置一个IP地址     1.初始状态已添加一个网卡eth0,并设置的均为自动获取IP地址,如下图所示:网卡为eth0,ip地址为10.1.249.36;为了后续实验的顺利进行,我们把NetworkManager服务关闭     chkconfig NetworkMa…

    Linux干货 2016-09-06
  • linux重装grub,并且设置多重引导

    一、利用linux安装盘(U盘,或者光盘等),启动计算机 二、选择troubleshotting==》Rescue a Centos system==》Continue 三、在shell中输入如下命令     chroot /mnt/sysimage     grub2-install /dev/vda   …

    Linux干货 2017-04-28
  • 搭建缓存功能的WEB服务集群

    搭建缓存功能的WEB服务集群 实验简介 本文主要介绍双主模型的nginx proxy高可用集群的搭建方式。实验环境: 使用nfs服务器提供页面数据共享 使用单独的mariadb服务器提供关系型数据库 使用两台httpd服务器处理动态的php和静态页面资源 使用两台nginx服务器处理图片资源 使用两台varnish服务器作缓存处理 使用两台nginx作代理 …

    Linux干货 2017-07-15