文本查找与文件查找

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

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

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

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

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

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

文件的查找 

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

    先说文件名的查找:

    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

相关推荐

  • MBR详解

    前言:     话说,现在买电脑如果预装win8以上的系统,基本上都是GPT。想当年博主买的电脑预装的win8磁盘分区样式就是GPT,而且貌似如果想把win8换win7就得把GPT改成MPR。虽然会在最后提到GPT,不过本文还是主要讲解MBR,并通过实验验证。 机械硬盘: 主引导记录(Master Boot Record,缩写:MBR),…

    Linux干货 2016-11-14
  • 20160802作业

    20160802作业 1、每日课堂笔记总结 2、预习 3、每日课堂pdf练习 4、在/data/testdir里创建的新文件自动属于g1组,组g2的成员如: alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 [root@Centos7 ~]# chmod…

    Linux干货 2016-08-04
  • wk_01作业

    计算机 介绍 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具。在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机科学,而“计算机技术”指的是将计算机科学的成果应用于工程实践所派生的诸多技术性和经验性成果的总合。“计算机技术”与“计算机科学”是两个相关而又不同的概念,它们的不…

    Linux干货 2016-12-04
  • tomcat

    编程语言: 硬件级:微码编程,汇编语言 系统级:C,C++,… 应用级:Java, PHP, Python, Ruby, Perl, C#, … 程序:指令+数据 过程式编程:以指令为中心,数据服务于代码; 对象式编程:以数据为中心,指令服务于数据; java Java代码的运行:*.java(source code) –…

    Linux干货 2017-07-03
  • LInux系统上的文件管理类型以及bash的基础特性

    LInux系统上的文件管理类型以及bash的基础特性

    2017-12-12
  • 从2个命令简单聊聊CentOS账户锁定原理

    linux中 passwd -l 和usermod -L有什么区别,各自的解锁和锁定原理是什么样的呢?

    2017-11-16