linux shell之常用命令(Ⅲ)

作为半个系统管理员,学好linux命令及编好shell程序成为了必须,但是功夫不是一早一夕练成的,只有在 工作中慢慢总结经验。废话少说,写下今天仔细看的,方便以后查用。

正则表达式

要用好shell,必须得精通正则表达式:

 *  : 匹配前面字符的任意多次,如1133*匹配113、1133、11333、1133312等等
 .  :  用于匹配任意一个字符,但不能是换行,例如13.就不能匹配13
 ^  :  匹配行首,但是在中括号[]中,表示取反
 $  :  匹配行尾,如^$就匹配空行
 [] : 匹配中括号中的某一个字符集,如[xyz]将会匹配x或y或z,[0-9a-zA-Z]匹配一个数字或字母
 \  :  转义符号,在“”中其将特殊字符解释为字面含义,但在‘’中失效
 "\<the\>" : 转义的尖括号,其表示匹配完整的单词the,而then、other等都不符合
 "[0-9]\{5\}":  转义的大括号,其表示精确匹配5个数字
 ? : 匹配其前面的字符1次或者0次
 +  :  匹配前面的字符一次或者多次
 () :  括起一组正则表达式,如re(a|e)d匹配read或者reed,管道线“|”表示或者

这只是一份简单的介绍,但是已经涵盖了很多情况了

awk

awk是一门基于域的文本处理语言,其功能非常之强大,我们只在这里萃取一下shell经常运用的部分。我们 结合一个例子来看awk的用法:

 CONTAINER ID
 5a0cb84b33b7 zhing/ruby:sinatra
 95e98d5e9ea6 ubuntu:12.04
 5de2bdbd425c zhing/ruby:sinatra
 61678af828f0 ruby:latest
 ebccb6b30826 zhing/ruby:sinatra
 88fa7c02dc86 ruby:latest
 43edaa47497e 10.1.1.64:5000/ubuntu:12.04
 e62c95f1549c 10.1.1.64:5000/paas:nats
 6ac7d8eaa777 zhing/ruby:sinatra
 de5793cd6868 ubuntu:12.04
 4dbca9313025 zhing/ruby:sinatra
 9f3412d14a15 zhing/ruby:sinatra
 027fcca3f64f 10.1.1.64:5000/paas:nats

这是通过docker ps -a而得到的一系列容器的ID和镜像,其实后面的字段还有很多,我就选了两个字段。 现在需要提取出容器ID,然后对于容器ID进行排序,可以这样来做:

 docker ps -a | awk '{printf "%s\n",$1}' | grep -v CONTAINER | sort

是不是很cool。下面我们来看看sort

sort

网上有一篇很好的博文,讲述了sort如何使用:http://blog.sina.com.cn/s/blog_a56ef5490101dh9i.html , 我们只需要抓住它把一行作为一个元素就好用许多了:

 sort -u :  在输出行中去除重复行
      -r : sort的默认排序为升序,-r选项改为降序
      -o : sort默认将结果输出为标准输出,但是-o可以将输出重定向到文件中
      -n : 以数字而非字符来排序
      -t -k:如果我们需要将一行分成几个字段,-t可以指定分隔符,-k指定字段的列数

我们经常把sort与awk、grep等一起来使用,给我们写代码往往带来简单高效的便利。

grep

我们日常使用grep应该是最多的了,这个命令相对更简单,是对正则表达式的应用。

 grep -i : 在字符串比较时忽略大小写
      -n : 显示匹配的行号
      -v : 反向检索
      -w : 匹配完整单词,与正则表达式中的尖括号效果相同
      -x : 匹配完整行

说到grep,我们每次都会想到find和xargs命令,这三个命令配合能产生让人惊奇的效果,如我们要找当前 目录下的任意文件,文件中包含了"zhing"这个完整单词,我们可以这样写:

 find . -name "*" | xargs grep -w zhing

熟悉命令只是书写shell的第一步,也是最关键的一步。



Previous     Next
zhing /
Published under (CC) BY-NC-SA in categories linux  tagged with linux