AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操做语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一我的所拥有的知识。awk通过改进生成的新的版本nawk,gawk,如今默认linux系统下平常使用的是gawk,用命令能够查看正在应用的awk的来源(ls -l /bin/awk )php
对一个developer 来讲,脚本愈来愈重要,尤为在一些辅助性的事情的上面. 替换文本的一些内容,排序一些字符,代码中检测一下规范,等等.linux
好多时候,想把目录中的tree结构转成文本,或者想要的文档. 使用shell
脚本就少不了sed
和awk
.今天来讲下使用awk
过程当中的一些不解:正则表达式
ls -l /Users/oker/ | awk '/^d/ {print $NF}
这里只会打印出来/Users/oker/
目录下的子目录shell
同理 ls -l /Users/oker/ | awk '/^-/ {print $NF}
这里只会打印出来/Users/oker/
目录下的文件编程
awk
中的/ /
里面不该该是正则表达式么?在这里仍是么?^
是表示字符串中开始的位置.可是d
该怎么理解?若是咱们按照正则表达式来理解,会发现d
不知道该怎么解释,由于正则表达式中表示[0-9]
的是\d
.可是这里只有一个d
,难道是匹配d
开头的?bash
在查看许多文档以后发现一个相似的解释: awk工具
ls -l /usr/bin | awk ' $1 ~ /^-/ {t["Regular Files"]++} $1 ~ /^d/ {t["Directories"]++} $1 ~ /^l/ {t["Symbolic Links"]++} END {for (i in t) print i ":\t" t[i]} '
复制代码
咱们先来看下ls -l
打印的什么spa
$ ls -l
code
-rw-r--r--@ 1 oker staff 1391 9 20 17:10 AuthSetting.h
-rw-r--r--@ 1 oker staff 5448 9 20 17:58 AuthSetting.m
-rw-r--r--@ 1 oker staff 1468 9 20 17:48 Context.h
-rw-r--r--@ 1 oker staff 1108 9 20 17:48 Context.m
drwxr-xr-x 4 oker staff 128 9 21 13:59 kycauth1
drwxr-xr-x 32 oker staff 1024 9 21 17:09 kycauth2
drwxr-xr-x 23 oker staff 736 9 20 17:10 kycauth3
drwxr-xr-x 20 oker staff 640 9 21 13:59 kychome
复制代码
若是是文件最前面是-
若是是目录最前面是d
cdn
文件类型代码:[ d ]--目录、[ - ]--文件、[ l ]--连接、[ b ]--可储存周边设备、[ c ]--序列设备。
文件权限属性:[ r ]--可读、[ w ]--可写、[ x ]--可执行。
从这里能够看出
/^d/
是一个正常的正则,用来过滤是目录(Directories
)/^-/
是一个正常的正则,用来过滤是文件(Files
)/^l/
是一个正常的正则,用来过滤是连接(Links
)