NO16 第二關課後考試-aw-F-過濾已知的一級目錄

 

·總結的經驗:
一、學會總結時學好運維的重要前提。
二、經過案列或例子來總結一個技術點或者命令。
三、畫一張邏輯圖,形象的卡通記憶這個知識技術點。
四、經過管道過濾數據時,最好先輸出結果,而後回退再使用管道看着結果過濾。正則表達式


1、如何過濾出已知當前目錄下oldboy中的全部一級目錄(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是以及目錄)?bash

分析過程:要完成此題,咱們首先要想如何區分目錄和文件?
1 根據顏色區分
2 ls -l 輸出結果中以d(directory)開頭的就是目錄
3 ls -l 輸出結果中第二列數字大於1的就是目錄(文件沒有硬連接的狀況下是對的)
4 經過給目錄加標識,而後經過濾標識就過濾出目錄
 (ls -F給不一樣文件加不一樣符號 或ls -p 只給目錄加斜線)
5 經過find直接查找指定類型的文件(-d就是目錄)運維

建立環境:
[root@localhost oldboy]# mkdir ext/oldboy 1 2 3 4 a b c d -p
[root@localhost oldboy]# tree
.
├── 1
├── 123.log
├── 2
├── 3
├── 4
├── a
├── b
├── c
├── d
├── ext
│   └── oldboy
└── oldboyspa

11 directories, 1 file
[root@localhost oldboy]# ls -l
total 696
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
-rw-r--r-- 1 root root 712614 Apr  1 00:16 123.log
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy
[root@localhost oldboy]# ls -F   (給目錄加標識,-F 給不一樣文件加不一樣符號)
1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/
[root@localhost oldboy]# ls -p   (給目錄加標識,-p 只給目錄加斜線)
1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/awk


方法一:
[root@localhost oldboy]# ls -l|grep "^d"
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboysed

方法二:
[root@localhost oldboy]# ls -F
1/  123.log  2/  3/  4/  a/  b/  c/  d/  ext/  oldboy/
[root@localhost oldboy]# ls -F|grep "/$"       (/$:以/爲結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/file

方法三:
[root@localhost oldboy]# find ./ -maxdepth 1 -type d   (-maxdepth 1表示查找命令的深度)
./    (./*比./多個*:表示只找./目錄下的不包括./目錄自己,這裏就有./自己)
./1
./2
./3
./4
./a
./b
./c
./d
./oldboy
./ext
[root@localhost oldboy]# find ./* -maxdepth 1 -type d  (./*比./多個*:表示只找./目錄下的不包括./目錄自己)
./1
./2
./3
./4
./a
./b
./c
./d
./ext
./ext/oldboy   (怎麼去掉這個子目錄?-type d後面加 ! -name ".")
./oldboy
[root@localhost oldboy]# find . -maxdepth 1 -type d ! -name "."
./1
./2
./3
./4
./a
./b
./c
./d
./oldboy
./extgrep

方法四:(第二列數字大於1的就是目錄)
[root@localhost oldboy]# ls -l
total 696
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
-rw-r--r-- 1 root root 712614 Apr  1 00:16 123.log
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy
[root@localhost oldboy]# ls -l|awk '{if($2>1) print $0}'  ($2>1,第二列大於1。$0輸入整行)
total 696
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy方法

方法五:
[root@localhost oldboy]# ls -dl */    (這個不經常使用)
drwxr-xr-x 2 root root  6 Jun  1 02:39 1/
drwxr-xr-x 2 root root  6 Jun  1 02:39 2/
drwxr-xr-x 2 root root  6 Jun  1 02:39 3/
drwxr-xr-x 2 root root  6 Jun  1 02:39 4/
drwxr-xr-x 2 root root  6 Jun  1 02:39 a/
drwxr-xr-x 2 root root  6 Jun  1 02:39 b/
drwxr-xr-x 2 root root  6 Jun  1 02:39 c/
drwxr-xr-x 2 root root  6 Jun  1 02:39 d/
drwxr-xr-x 3 root root 20 Jun  1 02:41 ext/
drwxr-xr-x 2 root root  6 Jun  1 02:39 oldboy/技術

方法六:
[root@localhost oldboy]# ls -l|sed -n '/^d/p'   (sed命令過濾功能記一下,^d表示以d開頭)
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

[root@localhost oldboy]# ls -F|sed -n '/\/$/p'  (也能夠過濾以/結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/


方法七:
[root@localhost oldboy]# ls -l|awk '/^d/'        (awk命令過濾功能記一下,^d表示以d開頭)
drwxr-xr-x 2 root root      6 Jun  1 02:39 1
drwxr-xr-x 2 root root      6 Jun  1 02:39 2
drwxr-xr-x 2 root root      6 Jun  1 02:39 3
drwxr-xr-x 2 root root      6 Jun  1 02:39 4
drwxr-xr-x 2 root root      6 Jun  1 02:39 a
drwxr-xr-x 2 root root      6 Jun  1 02:39 b
drwxr-xr-x 2 root root      6 Jun  1 02:39 c
drwxr-xr-x 2 root root      6 Jun  1 02:39 d
drwxr-xr-x 3 root root     20 Jun  1 02:41 ext
drwxr-xr-x 2 root root      6 Jun  1 02:39 oldboy

[root@localhost oldboy]# ls -F|awk '/\/$/'    (也能夠過濾以/結尾的)
1/
2/
3/
4/
a/
b/
c/
d/
ext/
oldboy/

 

 

上述方法總結:
1、ls -l|grep "^d"   
    #以d開頭的

2、ls -l|awk '{if($2>1) print $0}' 
    #第二列數字大於1的

3、ls -F|grep "/$"  
    #給目錄加標識,-F 給不一樣文件加不一樣符號
      ls -p|grep "/$"  
    #給目錄加標識,-p 只給目錄加斜線         

4、find . -maxdepth 1 -type d ! -name "."   
    #find加深度-maxdepth,類型d,而後取反,不包含名字爲.的當前目錄。

5、[root@localhost oldboy]# ls -dl */    (這個不經常使用)

6、[root@localhost oldboy]# ls -l|sed -n '/^d/p' (sed命令過濾功能記一下,^d表示以d開頭)
    [root@localhost oldboy]# ls -F|sed -n '/\/$/p'  (也能夠過濾以/結尾的)

7、[root@localhost oldboy]# ls -l|awk '/^d/' (awk命令過濾功能記一下,^d表示以d開頭)
    [root@localhost oldboy]# ls -F|awk '/\/$/'    (也能夠過濾以/結尾的)

 

awk命令:

·awk        #(三劍客老大)過濾,輸出內容,自成一門語言。 NR:行號
              $1,2...  第一,二...列以此類推。但$0:標識一行。
              -F 指定分隔符(-F ":"以:爲分隔。$NF是最後一列。$1,$4,$NF逗號讓結果間有空格)
                 [root@localhost oldboy]# tail -1 /etc/passwd
                 oldboy:x:1001:1001::/home/oldboy:/bin/bash
                 [root@localhost oldboy]# awk -F ":" 'NR==1 {print $6}' /etc/passwd
                 /root
                 [root@localhost oldboy]# awk -F ":" 'NR==1 {print $NF}' /etc/passwd
                 /bin/bash
                 [root@localhost oldboy]# awk -F ":" 'NR==1 {print $1,$4,$NF}' /etc/passwd
                  root 0 /bin/bash

 

 

 


Linux三劍客(只適合grep,sed,awk)正則表達式,對普通命令不適合(通配符)1 ^    #以...開頭,^d,意思是以d開頭2 $    #以...結尾,/$,意思是以/結尾3 \    #讓本來有意義的字符脫掉馬甲,還原它自己的含義4 .    #表明任意單個字符5 *    #表明全部

相關文章
相關標籤/搜索