文本查找与文件查找

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

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

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

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

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

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

文件的查找 

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

    先说文件名的查找:

    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下的进程调度与作业管理 一、概述 1.1 进程的相关概念: 通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器: 从这2个图我们可以看出,windows 下的…

    Linux干货 2016-10-17
  • Nginx的安装及其一些配置

    nginx的编译安装    tar xf nginx-1.12.2.tar.gz   cd nginx-1.12.2     yum install pcre-devel  ./configure –help   groupadd -r nginx     useradd -g nginx -r nginx    id nginx     ./c…

    Linux干货 2017-10-25
  • 网络配置与进程管理

    一、网络配置 1、ifconfig命令  ifconfig [IFACE]      显示所有启动的网络接口信息,包括网卡别名;指明网络接口时,显示指定网络接口信息 ifconfig -a     显示所有网络接口的信息,包括未启动的网卡接口。 if…

    Linux干货 2016-09-08
  • 编程能力与编程年龄

    程序员这个职业究竟可以干多少年,在中国这片神奇的土地上,很多人都说只能干到30岁,然后就需要转型,就像《程序员技术练级攻略》这篇文章很多人回复到这种玩法会玩死人的一样。我在很多面试中,问到应聘者未来的规划都能听到好些应聘都说程序员是个青春饭。因为,大多数程序员都认为,编程这个事只能干到30岁,最多35岁吧。每每我听到这样的言论,都让我感到相当的无语,大家都希…

    Linux干货 2016-08-15
  • 学习开始拼搏、加油、努力

          搏一搏单车变摩托,用4个月时间为自己创造一个更好的未来,欧耶!。。。

    Linux干货 2016-10-28
  • 排错

    把/etc/inittab  模式改为6模式 怎么修复 1 先把 vim /etc/inittab 打开 2 把/etc/inittab 模式改为6 3 reboot 4 在倒计时完之前按任意键 5按A进入 6 在quiet  命令后面写入 3  模式 重启 7把 vim /etc/inittab 打开 8 把/etc…

    Linux干货 2017-05-15