Linux正则表达式与三剑客

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux正则表达式与三剑客相关的知识,希望对你有一定的参考价值。

前面我们学习了Linux的基本命令,不到50个吧,这些命令仅仅使我们学会使用Linux,但是想要玩儿好Linux还不是不够的,下面我讲下Linux中最重要的三个命令在业界被称为“三剑客”。他们是awk,sed,grep.我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。具体怎么使用就是我们今天要讲的:技术分享

在说这三个命令前我们要插入一个小插曲就是“正则表达式”。

什么是正则表达式呢?技术分享

所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。学习起来非常不易,为了大家能更好的熟练的使用他们,我在这里做个简单的总结:

首先我说下我们作为Linux运维为什么要使用他?技术分享

Linux下一切皆文件,在工作中我们大多的操作都是对文件的处理,在以后shell脚本中使用,更是能让我们代码短小精悍。总之就是一句能大大的提高我们的工作效率。

三剑客与正则表达式是什么关系呢?技术分享

我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!

现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。具体如下

元字符

功能

意思

^

匹配行首

表示以某个字符开头

   $

匹配行尾

表示以某个字符结尾

  ^$

空行的意思

表示空行的意思

   .

匹配任意单个字符

表示任意一个字符

*

字符*   匹配0或多个此字符

表示重复的任意多个字符

   \

屏蔽一个元字符的特殊含义

表示去掉有意义的元字符的含义

[]

匹配中括号内的字符

表示过滤括号内的字符

.*

代表任意多个字符

就是代表任意多个字符

lele\{n\}

用来匹配前面lele出现次数。n为次数

就是统计前面lele出现的次数

lele\{n,\}

含义同上,但次数最少为n

从功能就可以看出

lele\{n,m\}

义同上,但lele出现次数在nm之间

从功能也可以看出

lele\{n,m\}

义同上,但lele出现次数在nm之间

从功能也可以看出

再说正则表达式使用前,在这里我先告诉大家,三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可。同样在这里我还给大家做了总结,大家只要把他们背下来即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

我们先看下grep命令技术分享

说道查找我们有必要回顾下前面说过的查找命令 whichfind.which是查找命令的,find是查找文件或者目录的。我们这里的grep是查找文件内容的。

例如我想查找/etc/passwd文件内包含有root字符的行。

技术分享

Grep命令有几个参数有必要跟大家说下

-c :计算找到 ‘搜寻字符串‘的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 ‘搜寻字符串‘内容的那一行!

--color=auto :可以将找到的关键词部分加上颜色的显示喔!

我们刚才查的是没有颜色的,现在我们让他有颜色,怎么弄呢,这就要用到我们的命令别名了。看下面

技术分享

我们有时还想知道行数,那怎么办呢?用-n就可以了

技术分享

但我们有时想查找不包含root的行,那怎么弄呢?对用-v即可

技术分享

Grep 与正则表达式

查找以s开头的行

技术分享

查找以n结尾的行

技术分享

至于别的元字符使用,我们先不了解,在这里我们最重要的掌握住少量的使用,日后在慢慢扩展。

Sed命令技术分享

Sed我们说是擅长取行和替换,说到取行,我们前面是不是说过headtail,这两个命令也可以取行的。那么sed命令是怎么取行的呢?看下面

技术分享

有童鞋说我现在想取出25行的内容看下

技术分享

以上就是sed取行的功能,下面我们说说他的替换功能,有时我们不想进入文件内但又想把文件内容给替换了,这时候sed就可以帮助到我们啦!


技术分享-i :直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。

g: 是全局的意思。其中#是格式符,他也可以是@或者别的/

Sed命令的功能很多,我们在这里就暂时先掌握这两种,不要贪多。

Sed替换格式是:sed -i ‘s#要替换的内容#替换成的内容#g 文件名。

awk命令技术分享

awk命令我们前面说他是擅长取列,其命令格式是:awk {}’。接下来看看怎么使用

我们现在想取出/etc/passwd文件中第二列,在Linux命令中有一个命令可以实现,我前面没讲到,他就是cut.我们先看下cut怎么实现的

技术分享

上面是我们用cut取出etc/passwd文件以:为分隔符的的第一列。Cut命令的参数-d是指定分隔符,-f是指定列。后面是文件。如果显示多列呢如下

技术分享

从上面可以看出就是在指定列的后面在加上逗号,于列的序数即可。Cut还有很多功能,我们在这里也是只说他取列的功能,别的功能咱们咱不要考虑。下面看我们的awk命令怎么取列的

技术分享

想取出多列就如下

技术分享

也就是在$1后面加上一个逗号和$n “n”就是第几列的意思。

至于sedawk他们和正则表达式的结合,我们在后面脚本会详细的说明。这里我们只要知道以上功能就可以了。技术分享

看到了简单吧!就是这么简单,好多童鞋在学习三剑客的时候都不知道怎么下手,在这里我给你大家用总结加例子的方式告诉大家,是不是很简单!技术分享

 下节我们讲下通配符及学习Linux的个人思想!技术分享


本文出自 “乐乐快跑” 博客,请务必保留此出处http://10851431.blog.51cto.com/10841431/1743610

以上是关于Linux正则表达式与三剑客的主要内容,如果未能解决你的问题,请参考以下文章

linux三剑客---grep,sed,awk与正则表达式

❤️Linux三剑客与管道符正则表达式的使用❤️

linux12shell编程 --> 三剑客之grep命令

linux12shell编程 --> 三剑客之sed命令

Linux三剑客之grepegrep及正则表达式使用详解

正则表达式与文本处理三剑客之一:grep和egrep