Shell常用命令find、grep總結


一、find 命令

  find 命令的常用形式可以簡化為 

1 find [path...][expression]

 

  •  path:find 命令查找的目錄路徑,其中 ./ 表示當前目錄,/ 表示系統根目錄
  •  expression:可以分為

     

1 -options [-print -exec -ok ...]

 

    •  -options:指定 find 命令的常用選項
    •  -print:find 命令將匹配的文件輸出到標准輸出
    •  -exec:find 命名對匹配的文件執行該參數所給出的 shell 命令
    •  -ok:與 -exec 類似,只不過在執行每一個命令之前都會給出提示,讓用戶決定是否執行    

1. find 命令的常用選項

  •  -name

  按照文件名查找文件。

1 # 在當前目錄與子目錄下查找txt后綴的文件
2 find ./ -name "*.txt"

 

  •  -mtime -n +n  

  按照文件的更改時間來查找文件,-n 表示文件更改時間在 n 天之內,+n 表示文件更改時間在 n 天之外。

1 # 查找在當前目錄下2天內修改的文件
2 find ./ -mtime -2
  •  -newer file1

  查找比文件 file1 新(即更改時間晚)的文件

1 # 查找當前目錄下比1.txt新的文件
2 find ./ -newer 1.txt
  • -type

  查找某一類型的文件,例如

    d - 目錄

    f - 普通文件

    b - 塊設備文件

    c - 字符設備文件

    p - 管道文件

    l - 符號鏈接文件

1 # 在當前目錄查找所以目錄文件
2 find ./ -type d
  • -size n

  查找大小為 n 的文件,末尾帶有 c 時表示文件大小以字節計,帶 k 時表示文件大小以 KB 計,以此類推。

1 # 查找當前目錄下大小大於10k的文件
2 find ./ -size +10000c

 

 

2. find 與 xargs 搭配

  xargs 與 -exec 類似,對 find 命名匹配的文件執行該參數所給出的 shell 命令,並且效率更高。

 1 # 查找當前目錄下所有文件並輸出文件類型
 2 find . -type f -print | xargs file 
 3 
 4 # 查找當前目錄下所有txt文件並將結果輸出到txt.log文件,一行輸出一個結果
 5 find . -name "*.txt" -print | xargs -n1 > /e/txt.log
 6 
 7 # 查找當前目錄下的所有文件並在這些文件中搜索add_experience並將結果輸出到文件
 8 find . -type f | xargs grep "add_experience" > /f/add_experience.txt
 9 
10 # 刪除3天以前的所有文件和文件夾
11 find ./ -mtime +3 -print | xargs rm -f -r
12 
13 # 刪除文件大小為0的文件
14 find ./ -size 0 | xargs rm -f

 

 

二、grep 命令

 

  grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。它的命令格式一般為:

1 grep [option] "pattern" filename
  • option 常見選項
    •  -c:只輸出匹配行的計數
    •  -i:不區分大小寫(只適用與單字符)
    •  -n:顯示匹配行及行號
    •  -s:不顯示不存在或無匹配文本的錯誤信息
    •  -v:顯示不包含匹配文本的所有行
    •  -o:只顯示文件中匹配到的部分
    •  -l:列出匹配的文件清單
    •  -L:列出不匹配的文件清單
  •  pattern:要搜索的關鍵字或正則表達式語句
  •  要搜索的文件名

1.簡單使用

  如下所示:

1 # 查找1.txt中存在aaa的行,並輸出行號
2 grep -n "aaa" 1.txt

 

 

2. 正則表達式

  正則表達式主要元字符及使用如下表所示:

元字符

功能

例子

匹配什么

^

錨定行的開始

/^love/

匹配所有以love開頭的行

$

錨定行的結束

/love$/

匹配所有以love 結束的行

.

匹配一個字符

/l..e/

匹配這樣的行,這些行包含這樣的字符:第一個字符是l,緊跟着兩個字符,然后是e

*

代表0個或多個先前字符

/*love/

匹配所有這樣的行,有0個或多個空格,空格后跟着love

[]

匹配字符組中的一個字符

/[Ll]ove/

匹配所有包含love或者Love的行

[^]

匹配一個不在范圍內的字符

/[^A-Z]ove/

 

<

錨定單詞的開始

<love

匹配所有這樣的行,這些行包含以love開頭的單詞(vi和grep支持這個功能)

>

錨定單詞的結束

Love>

匹配所有這樣的行,這些行包含以love結束的單詞(vi和grep支持這個功能)

(..)

標記后面用到的匹配字符

/(love)able1rs/

最多可以使用9個標簽。第一個標簽是模板最左邊的部分。在本例子中,模板love保存的標簽為1,后面的1指得就是love;本例子搜索的是這樣的行,這些行包含這樣的字符,在Loveabel后面跟着lovers

x{m}

M次復制字符x

   

x{m,}

至少m次復制字符x

   

x{m,n}

至少m次,至多n次復制字x

   

w

文字和數字字符,[A-Za-z0-9]

Lw*e

匹配一個L字符,緊跟着0個或多個文字或數字字符,然后是e

W

同上

   

b

單詞分界線

bloveb

僅僅匹配單詞love

 

  簡單使用如下:

1 # 搜索aaa開頭的行
2 grep -n '^aaa' 1.txt
3 
4 # 搜索至少包含連續3個a的行
5 grep -n 'a\{3,\}' 1.txt
6 
7 # 搜索包含aaa或者daa的行
8 grep -n '[ad]aa' 1.txt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM