awk '/^d/' 的理解使用

前言

AWK是一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操做語言(其名稱得自於它的創始人阿爾佛雷德·艾侯、彼得·溫伯格和布萊恩·柯林漢姓氏的首個字母)的最大功能取決於一我的所擁有的知識。awk通過改進生成的新的版本nawk,gawk,如今默認linux系統下平常使用的是gawk,用命令能夠查看正在應用的awk的來源(ls -l /bin/awk )php

腳本

對一個developer 來講,腳本愈來愈重要,尤爲在一些輔助性的事情的上面. 替換文本的一些內容,排序一些字符,代碼中檢測一下規範,等等.linux

好多時候,想把目錄中的tree結構轉成文本,或者想要的文檔. 使用shell腳本就少不了sedawk.今天來講下使用awk過程當中的一些不解:正則表達式

ls -l /Users/oker/ | awk '/^d/ {print $NF} 這裏只會打印出來/Users/oker/目錄下的子目錄shell

同理 ls -l /Users/oker/ | awk '/^-/ {print $NF} 這裏只會打印出來/Users/oker/目錄下的文件編程

疑問?

  1. awk中的/ /裏面不該該是正則表達式麼?在這裏仍是麼?
  2. 在正則表達式中^是表示字符串中開始的位置.可是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 -lcode

-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
複製代碼

若是是文件最前面是- 若是是目錄最前面是dcdn

  • 文件名中帶有[ . ]開頭的表明隱藏文件。
    linux
    linux 文件權限

文件類型代碼:[ d ]--目錄、[ - ]--文件、[ l ]--連接、[ b ]--可儲存周邊設備、[ c ]--序列設備。

文件權限屬性:[ r ]--可讀、[ w ]--可寫、[ x ]--可執行。

  • 對於目錄,必需具備執行權限纔可進入
  • 文件的執行屬性將決定文件是否可執行,而與文件擴展名無關

從這裏能夠看出

  1. /^d/ 是一個正常的正則,用來過濾是目錄(Directories)
  2. /^-/ 是一個正常的正則,用來過濾是文件(Files)
  3. /^l/ 是一個正常的正則,用來過濾是連接(Links)
相關文章
相關標籤/搜索