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)
相关文章
相关标签/搜索