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
)