前面我们学习了Linux的基本命令,不到50个吧,这些命令仅仅使我们学会使用Linux,但是想要玩儿好Linux还不是不够的,下面我讲下Linux中最重要的三个命令在业界被称为“三剑客”。他们是awk,sed,grep.我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。具体怎么使用就是我们今天要讲的:
在说这三个命令前我们要插入一个小插曲就是“正则表达式”。
所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。学习起来非常不易,为了大家能更好的熟练的使用他们,我在这里做个简单的总结:
Linux下一切皆文件,在工作中我们大多的操作都是对文件的处理,在以后shell脚本中使用,更是能让我们代码短小精悍。总之就是一句能大大的提高我们的工作效率。
我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!
现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。具体如下
元字符 | 功能 | 意思 |
^ | 匹配行首 | 表示以某个字符开头 |
$ | 匹配行尾 | 表示以某个字符结尾 |
^$ | 空行的意思 | 表示空行的意思 |
. | 匹配任意单个字符 | 表示任意一个字符 |
* | 字符* 匹配0或多个此字符 | 表示重复的任意多个字符 |
\ | 屏蔽一个元字符的特殊含义 | 表示去掉有意义的元字符的含义 |
[] | 匹配中括号内的字符 | 表示过滤括号内的字符 |
.* | 代表任意多个字符 | 就是代表任意多个字符 |
lele\{n\} | 用来匹配前面lele出现次数。n为次数 | 就是统计前面lele出现的次数 |
lele\{n,\} | 含义同上,但次数最少为n | 从功能就可以看出 |
lele\{n,m\} | 义同上,但lele出现次数在n与m之间 | 从功能也可以看出 |
lele\{n,m\} | 义同上,但lele出现次数在n与m之间 | 从功能也可以看出 |
再说正则表达式使用前,在这里我先告诉大家,三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可。同样在这里我还给大家做了总结,大家只要把他们背下来即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。
说道查找我们有必要回顾下前面说过的查找命令 which,find.which是查找命令的,find是查找文件或者目录的。我们这里的grep是查找文件内容的。
例如我想查找/etc/passwd文件内包含有root字符的行。
Grep命令有几个参数有必要跟大家说下
-c :计算找到 ‘搜寻字符串‘的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串‘内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
我们刚才查的是没有颜色的,现在我们让他有颜色,怎么弄呢,这就要用到我们的命令别名了。看下面
我们有时还想知道行数,那怎么办呢?用-n就可以了
但我们有时想查找不包含root的行,那怎么弄呢?对用-v即可
Grep 与正则表达式
查找以s开头的行
查找以n结尾的行
至于别的元字符使用,我们先不了解,在这里我们最重要的掌握住少量的使用,日后在慢慢扩展。
Sed我们说是擅长取行和替换,说到取行,我们前面是不是说过head和tail,这两个命令也可以取行的。那么sed命令是怎么取行的呢?看下面
有童鞋说我现在想取出2到5行的内容看下
以上就是sed取行的功能,下面我们说说他的替换功能,有时我们不想进入文件内但又想把文件内容给替换了,这时候sed就可以帮助到我们啦!
-i :直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。
g: 是全局的意思。其中#是格式符,他也可以是@或者别的/。
Sed命令的功能很多,我们在这里就暂时先掌握这两种,不要贪多。
Sed替换格式是:sed -i ‘s#要替换的内容#替换成的内容#g 文件名。
awk命令我们前面说他是擅长取列,其命令格式是:awk ‘{}’。接下来看看怎么使用
我们现在想取出/etc/passwd文件中第二列,在Linux命令中有一个命令可以实现,我前面没讲到,他就是cut.我们先看下cut怎么实现的
上面是我们用cut取出etc/passwd文件以:为分隔符的的第一列。Cut命令的参数-d是指定分隔符,-f是指定列。后面是文件。如果显示多列呢如下
从上面可以看出就是在指定列的后面在加上逗号,于列的序数即可。Cut还有很多功能,我们在这里也是只说他取列的功能,别的功能咱们咱不要考虑。下面看我们的awk命令怎么取列的
想取出多列就如下
也就是在$1后面加上一个逗号和$n “n”就是第几列的意思。
至于sed与awk他们和正则表达式的结合,我们在后面脚本会详细的说明。这里我们只要知道以上功能就可以了。
看到了简单吧!就是这么简单,好多童鞋在学习三剑客的时候都不知道怎么下手,在这里我给你大家用总结加例子的方式告诉大家,是不是很简单!
本文出自 “乐乐快跑” 博客,请务必保留此出处http://10851431.blog.51cto.com/10841431/1743610
原文地址:http://10851431.blog.51cto.com/10841431/1743610