文本查找与文件查找

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

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

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

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

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

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

文件的查找 

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

    先说文件名的查找:

    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 17:52
下一篇 2017-06-04 18:11

相关推荐

  • 磁盘管理之MBR,GPT的概念及MBR和GPT分区工具的使用

    一,概述 设备文件 I/O ports: I/O设备地址 一切皆文件 open() read() write()close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位”字符“,键盘 块设备和字符设备的区别 块设备可以随机访问,字符设备必须连续访问,如,/dev/null 块设备有缓存,字符设备没有缓存,因为字符设备…

    Linux干货 2016-09-06
  • shell脚本编程之函数

      在编写脚本时经常会遇到某个任务需要重复使用的问题,需每次都要输入同样的代码是件挺烦人的事情,还好可以通过编写函数还简化这项工作。   函数其实就是给一段代码起个名字,在每次使用这段代码的时候可以直接使用函数名来调用就可以了。 一、创建函数   创建函数的格式有两种:   格式1:function 函数名{ &nbs…

    Linux干货 2016-01-05
  • 防护墙服务

    iptables的基本认识        Netfilter组件: 内核空间,集成在linux内核中 扩展各种网络服务的结构化底层框架 内核中选取五个位置放了五个Hook(勾子)function(INPUT、OUTPUT、FORWARD、PREROUTING、POST ROUTING),而这五个hoot functio…

    2017-08-21
  • 网络N23期第三周cut,last,awk,tr,sort,useradd,usermod,groupadd等命令使用练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d '  ' -f1|uniq xinghuo root 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last -1  -a…

    Linux干货 2016-12-05
  • 马哥教育网络班20期+第2周课程练习

    1、Linux上的文件管理命令有哪些?其常用的使用方法及相关示例演示。 答: cp 复制、 mv 移动、rm 删除 (1)cp :复制文件或目录         用法:    cp [OPTION]… [-T] SOURCE DEST    cp [OPTI…

    Linux干货 2016-06-16
  • linux开机启动流程

    linux开机启动流程:   一、BIOS 加电自检 当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的. BIOS 的工作 1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统 2.寻找启动磁盘,每一种BIOS都会有开机启动菜…

    Linux干货 2016-09-14